【问题标题】:Android bottom navigation bar when press back go to previous fragment按返回时Android底部导航栏转到上一个片段
【发布时间】:2017-08-09 05:51:28
【问题描述】:

这是我的导航栏:

我的底部导航栏中有 4 个项目,当我按下后退按钮时,我希望它回到上一个片段,

这是我的 xml:

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottomnav"
    android:layout_width="382dp"
    android:layout_height="52dp"
    android:layout_marginBottom="0dp"
    app:itemBackground="@color/backbeyez"
    app:itemIconTint="@drawable/nav_items_color"
    app:itemTextColor="@drawable/nav_items_color"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/navigation"
    tools:layout_editor_absoluteY="515dp">

</android.support.design.widget.BottomNavigationView>

这是 MainActivity 的代码:

public class MainActivity extends AppCompatActivity {

public void switchorders() {
    FragmentManager manager = getSupportFragmentManager();
    manager.beginTransaction().replace(R.id.container, new OrdersLayout()).commit();
}

public void switchcredits() {
    FragmentManager manager = getSupportFragmentManager();
    manager.beginTransaction().replace(R.id.container, new CreditLayout()).commit();
}

public void switchworks() {
    FragmentManager manager = getSupportFragmentManager();
    manager.beginTransaction().replace(R.id.container, new ListLayout()).commit();
}

public void switchprofile() {
    FragmentManager manager = getSupportFragmentManager();
    manager.beginTransaction().replace(R.id.container, new ProfileLayout()).commit();
}

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


    BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomnav);
    BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);


    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            switch (item.getItemId()) {
                case R.id.navigation_orders:
                    switchorders();
                    break;

                case R.id.navigation_credit:
                    switchcredits();
                    break;

                case R.id.navigation_works:
                    switchworks();
                    break;

                case R.id.navigation_profile:
                    switchprofile();
                    break;
            }
            return true;
        }
    });

}

我也尝试使用以下语句定义后退按钮,但它们不起作用:

public void aboutback(View view) {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0)
    {
        boolean done = getSupportFragmentManager().popBackStackImmediate();
    }
}

“popbackstack()”和“popbackstackImmediate()”也不起作用!

【问题讨论】:

    标签: android fragment


    【解决方案1】:

    如果您想在片段中处理后推,则应该在添加或替换片段时添加 addToBackStack()

    尝试在你的所有片段中添加这样的内容

    public void switchorders() {
        FragmentManager manager = getSupportFragmentManager();
        manager.beginTransaction().replace(R.id.container, new OrdersLayout()).addToBackStack("TAG").commit();
    }
    

    默认处理。

    如果你愿意,你也可以在 onBackPress() 中处理

    【讨论】:

    • 但是底部导航栏并没有变到之前的,
    • 你必须通过在Activity中签入onBackPress()方法来处理它
    【解决方案2】:

    以下代码会将底部导航的主页片段图标的图标设置为活动状态,相应地使用以使每个图标在后按时处于活动状态:

    final BottomNavigationView mBottomNav = findViewById(R.id.nav_view);
    MenuItem homeItem = mBottomNav.getMenu().getItem(0);
    mBottomNav.setSelectedItemId(homeItem.getItemId());
    

    【讨论】:

      【解决方案3】:

      使用 AlertDialog 在 BackPressed 上试试这个,

      @Override
      public void onBackPressed() {
      
          new AlertDialog.Builder(this)
          .setTitle("Really Exit?")
          .setMessage("Are you sure you want to exit?")
          .setNegativeButton(android.R.string.no, null)
          .setPositiveButton(android.R.string.yes, new OnClickListener() {
      
              public void onClick(DialogInterface arg0, int arg1) {
                  WelcomeActivity.super.onBackPressed();
              }
          }).create().show();
      }
      

      希望对你有所帮助..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-07
        • 1970-01-01
        • 1970-01-01
        • 2022-11-04
        • 2019-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多