替换选项卡中的片段(没有viewpager)

时间:2014-05-13 05:48:58

标签: android android-layout android-fragments android-tabhost android-tabs

我的app中有2个标签。每个标签最初只有fragment

场景1(表1): 我在fragment的标签中添加了第二个Button点击了第一个fragment&再次从第二个fragment按钮点击第三个fragment

场景2(表2): 与tab1类似

场景2(在标签之间切换): 当我在标签之间切换时,我无法获得我在相应标签中添加的标签片段。

以下是我的代码:( First Fragment 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;
    }
}

Second Fragment 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 I上我无法保留我自己的片段

1 个答案:

答案 0 :(得分:0)

您可以尝试这一点 - 使用某个名称标记您的片段,并使用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
}

通过这种方式,它将始终记住第一个标签下屏幕上的最后一个片段。

此代码不完整,但您可以进一步发展此逻辑。