【问题标题】:replace the Fragment within the tab(Without viewpager)替换选项卡中的片段(没有 viewpager)
【发布时间】:2014-05-13 05:48:58
【问题描述】:

我的应用中有 2 个标签。每个标签最初都有一个 fragment

场景 1(选项卡 1): 我在Button 的选项卡中添加第二个fragment 从第一个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;
    }
}

第二个片段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 上我无法保留我各自的片段

【问题讨论】:

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


    【解决方案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
    }
    

    这样它会一直记住屏幕上标签一下的最后一个片段。

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

    【讨论】:

    • 你能发一些sn-ps让它更简洁
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多