[英]Android bottom navigation bar when press back go to previous fragment
这是我的导航栏:
我的底部导航栏中有 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()”也不起作用!
如果你想在片段中处理反压,那么你应该在添加或替换片段时添加addToBackStack()
尝试在您的所有片段中添加这样的内容
public void switchorders() {
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().replace(R.id.container, new OrdersLayout()).addToBackStack("TAG").commit();
}
它将默认处理。
如果需要,您还可以在活动中处理onBackPress()
以下代码将底部导航的主页片段图标的图标设置为活动,相应地使用使每个图标在后退时处于活动状态:
final BottomNavigationView mBottomNav = findViewById(R.id.nav_view);
MenuItem homeItem = mBottomNav.getMenu().getItem(0);
mBottomNav.setSelectedItemId(homeItem.getItemId());
在 BackPressed 上使用AlertDialog
试试这个,
@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();
}
我希望这可以帮助你..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.