java - 替换中 fragment 事务无法正常工作

标签 java android android-fragments android-tablayout

我正在使用 Fragment 和 tabLayout。 有一个问题。 hystory第一次显示fragment,第二次不显示,其他次数。但是home fragment 工作正常并随时显示。

TabLayout tabLayout;
FrameLayout frm_Content;

FragmentManager fragmentManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    frm_Content = (FrameLayout) findViewById(R.id.frm_content);

    final HomeFragment homeFragment = new HomeFragment();
    final HistoryFragment historyFragment =new HistoryFragment();

    fragmentManager =  getSupportFragmentManager();
    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.frm_content, homeFragment)
                .commit();
    }


    tabLayout.addTab(tabLayout.newTab().setText("home"),0);
    tabLayout.addTab(tabLayout.newTab().setText("hystory"),1);
    tabLayout.addTab(tabLayout.newTab().setText("region"),2);

    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {


            switch(tab.getPosition()){
                case 0 :
                   // fragmentManager.beginTransaction().hide(historyFragment);
                    fragmentManager.beginTransaction().replace(R.id.frm_content, homeFragment)
                            .commit();
                            .break();


               case 1:
                    fragmentManager.beginTransaction().replace(R.id.frm_content, historyFragment)
                            .commit();
                            .break();

                case 2 :


            }


        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/md_blue_grey_50"
android:orientation="vertical"
tools:context=".MainActivity">

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<FrameLayout
    android:id="@+id/frm_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</FrameLayout>

最佳答案

好吧,您的问题可能是您忘记在案例中添加 break

在 OnCreate 中,您将 homeFragment View 作为您看到的第一个 View 。然后单击 0 索引处的选项卡,打开 homeFragment 但错过了 break -> 在 homeFragment 之后,historyFragment 立即打开。

当您单击historyFragment(第一个位置)时,您也会错过break,但下一个(第二个位置)索引上没有其他操作,因此 fragment 不会更改。

你应该做的是在替换 fragment 后放置break

           switch(tab.getPosition()){
                case 0 :
                   // fragmentManager.beginTransaction().hide(historyFragment);
                    fragmentManager.beginTransaction().replace(R.id.frm_content, homeFragment)
                            .commit();
                    break;
               case 1:
                    fragmentManager.beginTransaction().replace(R.id.frm_content, historyFragment)
                            .commit();
                    break;
                case 2 :


            }

关于java - 替换中 fragment 事务无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56017564/

相关文章:

Java 教程 表达式的不完整定义

java - 将字符串拆分为包含以下字符串 "abc\u12345. "

java正则表达式,仅当不在引号或括号中时才以逗号分隔

android - 添加一个按钮到 PrefrenceScreen : Android

没有市场的 Android 应用

android - 单击列表项时没有任何反应

Java 表格布局

android - 如何创建 Delphi Android 应用程序 APK 以包含文件

android - 您不能在尚未附加的 View 或 getActivity() 返回 null 的 fragment 上开始加载

java - 如何修复空 fragment ?