我只有一個活動,它有一個底部導航
底部主要有三個片段:Home、List、Guide
在主頁片段中,有一個導航到新片段的按鈕(在與底部導航相同的主頁片段中)
導航現在效果很好,但是當我按下回傳時,應用程式關閉但沒有導航到主主頁片段。
這主要是由于底部導航的處理
這是從主頁到下一個片段的片段導航
Home_Fragment.Java
MaterialButton nextBtn = view.findViewById(R.id.nextBtn);
nextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Fragment fragment = new FinalHome_Fragment();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.addToBackStack(String.valueOf(Home_Fragment.class));
fragmentTransaction.commit();
}
});
MainActivity.java
// 在這里處理底部導航 *注意片段管理器和底部導航 actovuty 是我在主要活動中的全部內容
public BottomNavigationView bottomNavigationView;
Deque<Integer> integerDeque = new ArrayDeque<>(2);
boolean flag = true;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Window window = this.getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(this.getResources().getColor(R.color.black));
}
bottomNavigationView = findViewById(R.id.bottomNavigationView);
bottomNavigationView.setItemIconTintList(null);
integerDeque.push(R.id.home_icon);
loadFragments(new Home_Fragment());
bottomNavigationView.setSelectedItemId(R.id.home_icon);
bottomNavigationView.setOnNavigationItemSelectedListener(
item -> {
int id = item.getItemId();
if (integerDeque.contains(id)) {
if (id == R.id.home_icon) {
integerDeque.size();
if (flag) {
integerDeque.addFirst(R.id.home_icon);
flag = false;
}
}
integerDeque.remove(id);
}
integerDeque.push(id);
loadFragments(getFragment(item.getItemId()));
return true;
}
);
}
@SuppressLint("NonConstantResourceId")
private Fragment getFragment(int itemId) {
switch (itemId) {
case R.id.home_icon:
bottomNavigationView.getMenu().getItem(0).setChecked(true);
return new Home_Fragment();
case R.id.list_icon:
bottomNavigationView.getMenu().getItem(1).setChecked(true);
return new List_Fragment();
case R.id.guide_icon:
bottomNavigationView.getMenu().getItem(2).setChecked(true);
return new Guide_Fragment();
}
bottomNavigationView.getMenu().getItem(0).setChecked(true);
return new Home_Fragment();
}
public void loadFragments(Fragment fragment) {
if (fragment != null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, fragment, fragment.getClass().getSimpleName())
.commit();
}
}
@Override
public void onBackPressed() {
integerDeque.pop();
if (!integerDeque.isEmpty()) {
bottomNavigationView.setSelectedItemId(integerDeque.peek());
} else {
finish();
}
}
uj5u.com熱心網友回復:
如果您需要輕松控制 backstack,可以使用導航片段
https://developer.android.com/guide/navigation/navigation-getting-started
并且您應該顯示一條錯誤訊息以使其更容易解決
uj5u.com熱心網友回復:
您應該在這行代碼中設定斷點:
if (!integerDeque.isEmpty()) {
并檢查 integerDeque 中的值。
您還應該閱讀有關命名約定的資訊,將布林值命名為“標志”確實是個壞主意:)
uj5u.com熱心網友回復:
你確定你正在填滿你的佇列嗎?你正確地覆寫了
onBackPressed()
但看起來它每次都在其他地方
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/514033.html
上一篇:片段無法正常作業(可能是通貨膨脹錯誤)(Android)
下一篇:為什么我在使用FragmentContainerView時會收到android.view.InflateException
