Android - 如何仅初始化滑动菜单一次

时间:2013-05-03 18:53:27

标签: android fragment slidingmenu

我在项目中使用此滑动菜单

https://github.com/jfeinstein10/SlidingMenu

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

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

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

由于

1 个答案:

答案 0 :(得分: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),而菜单片段方法调用活动方法来替换内容框架中的内容片段(比较类BirdMenuFragment和示例中的ResponsiveUIActivity

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

无论如何,我希望我能帮助一下......干杯!