【问题标题】:Recylerview appends the old result on back pressedRecyclerview 将旧结果附加到后按
【发布时间】:2021-04-09 13:15:39
【问题描述】:

我正在尝试创建一个带有底部导航视图的应用程序,但它看起来像是在堆叠片段。让我给你看图清楚。

[![再次单击返回按钮时黑屏][3]][3]

代码如下: 主页.xml

 <androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/bottomfrag"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="?attr/actionBarSize"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        />
    <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bottom_app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:contentInsetStart="0dp"
        app:fabAlignmentMode="center">
        <com.rawat.soccermatch.CustomBottomNav
            android:id="@+id/bottomNavigationView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:itemRippleColor="@android:color/transparent"
            app:labelVisibilityMode="labeled"
            app:itemIconTint="@color/enable_disable"
            app:itemTextColor="@color/enable_disable"
            app:menu="@menu/bottom_nav_menu"
            app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior" />
    </com.google.android.material.bottomappbar.BottomAppBar>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:backgroundTint="#FF9800"
        android:contentDescription="@string/title_create"
        android:src="@drawable/ic_plusn"
        app:tint="#fff"
        app:layout_anchor="@id/bottom_app_bar" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Home.java

        bt = findViewById(R.id.bottomNavigationView);
    loadFragment(new HomeFrag()); // at first home fragment will be loaded
    bt.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment mfragment;
            int item_id=item.getItemId();
                    if(item_id==R.id.navigation_home){
                        mfragment = new HomeFrag();
                        loadFragment(mfragment);
                    }
                    else if(item_id==R.id.navigation_feed){

                        mfragment = new Feed();
                        loadFragment(mfragment);
                    }
                    else if(item_id==R.id.navigation_create){

                        mfragment = new creatematch();
                        loadFragment(mfragment);
                    }
                    else if (item_id==R.id.navigation_following){

                        mfragment = new Following();
                        loadFragment(mfragment);
                    }
                    else {

                        mfragment = new Account();
                        loadFragment(mfragment);
                    }

            return true;
        }
    });

    ft = findViewById(R.id.fab);
    ft.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ft.setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
            ft.setRippleColor(Color.GREEN);
            Fragment fragment = new creatematch();
            bt.getMenu().findItem(R.id.navigation_create).setChecked(true);
            loadFragment(fragment);
        }
    });

}

private void loadFragment(Fragment fragment) {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.bottomfrag, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

我也应该发布 HomFrag 代码吗?

我现在已经编辑了这个问题,我理解的问题是,当点击返回时,我的 Home Fragment 将从原来的位置恢复,但 recylerview 值正在重置,并将新结果附加到旧结果中。波纹颜色也不会从跟随变为主页。

【问题讨论】:

    标签: android android-studio bottomnavigationview


    【解决方案1】:

    试着用这个函数代替你的

     public void loadFragment(Fragment fragment) {
        try {
            FragmentManager manager = getSupportFragmentManager();
            FragmentTransaction ft = manager.beginTransaction();
            manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            ft.addToBackStack(null);
            ft.replace(R.id.bottomfrag, fragment);
            ft.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    【讨论】:

    • 你好,我解决了黑屏问题,但仍然无法摆脱双值我已经编辑了问题,请看一下。
    【解决方案2】:

    您正在将该片段添加到 backstack,因此当您单击返回分离它时,您需要确保您的片段未添加到 backstack

    【讨论】:

    • 你好,我解决了黑屏问题,但仍然无法摆脱双值我已经编辑了问题,请看一下。
    【解决方案3】:

    重写 onBackPressed() 方法。在其中,您可以检查当前打开的部分以及在这种情况下要执行的操作(无/关闭应用程序/导航到另一个部分)。

    【讨论】:

    • 你好,我解决了黑屏问题,但仍然无法摆脱双值我已经编辑了问题,请看一下。
    • 我看不到代码,但我想,你在 onResume() 方法中添加了日期,所以当你回到屏幕上时,它会再次添加它。解决方案 - 将此代码移至 onCreate() 或 onCreateView() 方法。
    【解决方案4】:

    在底部导航活动中,您必须设置默认片段是选择您想要的片段,例如常见的主页片段始终显示为默认片段,因此将 homefragment 设置为默认值。

    在创建时设置这些代码

    bottomNavigationView.setSelectedItemId(R.id.nav_home);
    

    检查后按

    @Override
        public void onBackPressed() {
    
            if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
                finish();
            } else {
                super.onBackPressed();
            }
        }
    

    【讨论】:

    • 你好,我解决了黑屏问题,但仍然无法摆脱双值我已经编辑了问题,请看一下。
    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 2015-06-08
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多