Android - Как инициализировать скользящее меню только один раз

Я использую это скользящее меню в своем проекте

https://github.com/jfeinstein10/SlidingMenu

Я добавляю это меню ко всем своим действиям. И это скользящее меню вызывает фрагмент при открытии. Как предотвратить создание нескольких фрагментов для каждого действия и вызвать, если фрагмент уже создан в заднем стеке?

Каждое из моих действий расширяет мою BaseActivity, и я инициализирую скользящее меню, подобное этому, в BaseActivity.

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

Спасибо

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) в то время как метод фрагмента меню вызывает метод действия для замены фрагмента содержимого во фрейме содержимого (сравните классыBirdMenuFragment а также ResponsiveUIActivity в примере).

Это просто схема того, как вы могли бы реализовать SlidingMenu и как вы можете заменить фрагменты в фрейме контента. Есть, конечно, некоторые проблемы, которые предстоит решить.

В любом случае, я надеюсь, что смогу немного помочь... Ура!

Другие вопросы по тегам