3

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

https://github.com/jfeinstein10/SlidingMenu

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

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

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

谢谢

4

1 回答 1

1

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

因此,拥有一个菜单和内容片段,您可以如下开始(也可以比较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 以及如何替换内容框架中的片段的概述。当然,还有一些挑战需要应对。

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

于 2013-05-03T19:55:39.900 回答