【问题标题】:Android - How to initialize sliding menu only onceAndroid - 如何只初始化一次滑动菜单
【发布时间】:2023-03-24 14:36:02
【问题描述】:

我在我的项目中使用这个滑动菜单

https://github.com/jfeinstein10/SlidingMenu

我正在将此菜单添加到我的所有活动中。这个滑动菜单在打开时调用了一个片段。如果 Fragment 已经在后台创建,如何防止为每个 Activity 创建多个 Fragment 并调用?

我的每个活动都在扩展我的 BaseActivity,我正在 BaseActivity 初始化这样的滑动菜单。

getSupportFragmentManager()
    .beginTransaction().replace(R.id.detail, new DetailFragment())
    .commit();

谢谢

【问题讨论】:

    标签: android fragment slidingmenu


    【解决方案1】:

    我会(至少)尝试只实现 一个 活动并替换内容框架中的各种片段。您应该知道该示例包含各种方法,您应该选择一种方法 one ;)

    因此,拥有一个菜单和内容片段,您可以按如下方式开始(也可以比较 ResponsiveUIActivity)。

    public class StartActivity extends SlidingFragmentActivity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ...
    
            Fragment contentFragment = InitialFragment()
    
            getSupportFragmentManager().beginTransaction()
               .replace(R.id.content_frame, contentFragment).commit();
    
            getSupportFragmentManager().beginTransaction()
               .replace(R.id.menu_frame, new MenuFragment()).commit();
    
            ...
        }
    
        public void switchContent(final Fragment fragment) {
            // replace fragment in content frame
            ...
        }
    

    在菜单片段中,可以根据用户的选择新建片段(比较BirdMenuFragment):

    public class MenuFragment extends ListFragment {
    
        @Override
        public void onListItemClick(ListView lv, View v, int position, long id) {
            Fragment newContent = null;
    
            switch (position) {
                case 1 : new ThisFragment();
                         break;
                case 2 : new ThatFragment();
                         break;
                case 3 : new AnotherFragment();
                         break;
            }
    
            if (newContent != null) switchFragment(newContent);
        }
    
        private void switchFragment(Fragment fragment) {
            // call StartActivity.switchContent
            ...
        }
    

    最后,活动和菜单片段之间的粘合是MenuFragment.switchFragment(Fragment fragment)StartActivity.switchContent(final Fragment fragment),而菜单片段方法调用活动方法来替换内容框架中的内容片段(比较类BirdMenuFragmentResponsiveUIActivity在示例)。

    这只是对如何实现 SlidingMenu 以及如何替换内容框架中的片段的概述。当然还有一些挑战需要应对。

    无论如何,我希望我能帮上点忙……干杯!

    【讨论】:

    • 你能解释一下吗:)这里的newFragment是什么以及如何替换内容框架中的片段。
    • 看看这个:github.com/jfeinstein10/SlidingMenu/blob/master/example/src/com/… for switchContent() 和这个:github.com/jfeinstein10/SlidingMenu/blob/master/example/src/com/… for switchFragment();另外我修复了这个:上面的new contentFragment - 应该没有newnewFragment 是什么意思?我没用过。
    • 好吧,我明白了。在我的代码中,我没有不同的片段。我有活动。例如 ListActivity 正在扩展 BaseActivity ,我如何在 ListActivity 切换内容?
    • 除了在上面的case 语句中切换片段,您当然也可以启动活动的意图 - 或者将两者混合在一起,例如case 2 : Intent intent = new Intent(...); ... startActivity(intent); break;。但是,使用片段绝对是推荐的方式。如果您有活动并且希望在所有活动上都有一个 SlidingMenu,则必须在所有活动中实例化一个 SlidingMenu - 最好在 BaseActivity 中实现一次。但这有缺点,例如如果您想在菜单中填充任何信息(例如指标)。
    • 试过了。但是如何在 switchContent 函数中更改内容(用于活动)?在这些示例中,它们替换的是旧片段而不是活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多