заменить фрагмент на вкладке (без просмотра пейджера)

У меня есть 2 вкладки в моем приложении. У каждой изначально есть одна fragment.

Сценарий 1 (вкладка 1): я добавляю второй fragment на вкладке Button, нажав на первый fragment, и снова третий fragment на кнопку, нажав на второй fragment.

Сценарий 2 (вкладка 2): аналогично вкладке 1.

Сценарий 2 (переключение между вкладками): когда я переключаюсь между вкладками. Я не могу получить тот же фрагмент вкладки, который я добавил на соответствующей вкладке.

Ниже мой код: (Первый фрагмент Tab1)

    public class ArticleFragment extends Fragment {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            ViewGroup view=(ViewGroup) inflater.inflate(R.layout.article_fragment, container,false);
            fragmentTabHost.setup(getActivity(), getChildFragmentManager() , R.id.frag_container);

            Button article_button = (Button) view.findViewById(R.id.article_btn);

            article_button.setOnClickListener( new OnClickListener() {

                @Override
                public void onClick(View v) {

                    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                    article_txt.setText("Changed Value");

                    ArticleDetails  articleFragment = new ArticleDetails();
                    fragmentTransaction.add(ScreenFragmentActivity.getContainertId(), articleFragment, AppConstants.ARTICLE_FRAGMENT_DETAILS);
                    fragmentTransaction.hide(ArticleFragment.this);
                    fragmentTransaction.addToBackStack(ArticleFragment.class.getName());

                    fragmentTransaction.commit();

                }
            });
        return view;
    }
}

Второй фрагмент Tab1:

public class ArticleDetails extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,

        ViewGroup view=(ViewGroup) inflater.inflate(R.layout.article_details, container,false);
        Button article_button = (Button) view.findViewById(R.id.article_details_btn);

        article_button.setOnClickListener( new OnClickListener() {

            @Override
            public void onClick(View v) {

                FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                ArticleDetailsWithIn  articleFragment = new ArticleDetailsWithIn();
                fragmentTransaction.add(ScreenFragmentActivity.getContainertId(), articleFragment,
AppConstants.ARTICLE_FRAGMENT_DETAILS_WITHIN);
                fragmentTransaction.hide(ArticleDetails.this);
                fragmentTransaction.addToBackStack(null);

                fragmentTransaction.commit();

            }
        });

        return view;
    }

Мой макет:

 <android.support.v4.app.FragmentTabHost
        android:id="@+id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TabWidget
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                android:orientation="horizontal" />

            <FrameLayout
                android:id="@+id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1" />

        </LinearLayout>
 </android.support.v4.app.FragmentTabHost>

Итак, в основном я пытаюсь добавить новый фрагмент на вкладку. Но на Switch я не могу сохранить свой соответствующий фрагмент.


person nitesh    schedule 13.05.2014    source источник


Ответы (1)


Вы можете попробовать это - пометить свои фрагменты каким-либо именем и сохранить его в любом статическом вспомогательном классе, используя метод getter/setter. Сделайте свое первое имя тега фрагмента по умолчанию (это для первого запуска). Затем в том месте, где у вас есть логика для добавления новых фрагментов, поместите необходимые операторы if-else. То же самое касается и другой вкладки. (вы даже можете использовать общие настройки, если хотите запомнить последний просмотренный фрагмент, даже когда приложение закрыто и перезапущено снова.)

Создайте статический вспомогательный класс.

public class HelperClass {
    private static string TabOneFragmentOnScreen = "";

    public static String getTabOneFragmentOnScreen () {
    return TabOneFragmentOnScreen ;
}
public static void setTabOneFragmentOnScreen(
        String TabOneFragmentOnScreen) {
    HelperClass.TabOneFragmentOnScreen = TabOneFragmentOnScreen;
}
}

Когда вы нажимаете одну TabOne

if(HelperClass.getTabOneFragmentOnScreen.equals("")){
    HelperClass.setTabOneFragmentOnScreen("FragmentOne");
    //logic to add fragment one goes here
}

if(HelperClass.getTabOneFragmentOnScreen.equals("FragmentTwo")){
    HelperClass.setTabOneFragmentOnScreen("FragmentTwo");
    //logic to add fragment two goes here
}

Таким образом, он всегда будет помнить последний фрагмент на экране под первой вкладкой.

Этот код неполный, но вы можете развивать эту логику дальше.

person Kaustuv    schedule 13.05.2014
comment
не могли бы вы опубликовать несколько фрагментов, чтобы сделать его более кратким - person nitesh; 13.05.2014