有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在底部导航器上处理rotate,在片段上导航

我仍然没有得到这个部分,我正在尝试确保我的实例在rotate上保存一次,以便进行良好的实践,但我已经用尽了所有的知识,我旋转的所有内容都导航回主堆栈,这是第一个片段。请看我的代码,告诉我我做错了什么

作为一名自学成才的Android开发者可能会很有挑战性,但我很欣赏这个网站

   private final BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
           = item -> {
               List<Fragment> fragments = getSupportFragmentManager().getFragments();
               boolean isOnStack = false;
               switch (item.getItemId()) {
                   case R.id.action_transactions:
                       fragment = new TransactionsFragment();
                       for(Fragment frag:fragments){
                           /* Check if fragment is on stack*/
                           if(frag instanceof TransactionsFragment){
                               isOnStack = true;
                               break;
                           }
                       }
                       break;
                   case R.id.action_budget:
                       fragment = new BudgetFragment();
                       for(Fragment frag:fragments){
                           /* Check if fragment is on stack*/
                           if(frag instanceof BudgetFragment){
                               isOnStack = true;
                               break;
                           }
                       }
                       }
                       break;
               }
               /*
                   Prevent duplicate record on back stack and keep consistent back navigation
                */
               if (!isOnStack)
                   getSupportFragmentManager().beginTransaction()
                           .replace(R.id.content, fragment, TAG)
                           .addToBackStack(null)
                           .commit();

               return true;
           };




    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(SELECTED_ITEM_POSITION,mPosition);

    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        mPosition = savedInstanceState.getInt(SELECTED_ITEM_POSITION);

    } 

共 (2) 个答案

  1. # 1 楼答案

    为此,需要使用.findFragmentByTag,首先检查片段是否为null。尝试将此代码添加到onCreate方法中

    全球的

    私有片段

    onCreate
    
    fragment = getSupportFragmentManager().findFragmentByTag(TAG);
    if (fragment == null) {
        fragment = new TransactionsFragment();
    }
    
  2. # 2 楼答案

    如果您的问题是未保存数据,请检查以下代码:

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(SELECTED_ITEM_POSITION,mPosition);
    
    }
    

    保存状态时,需要先存储数据,然后再调用super方法。当您调用super方法时,您正在保存数据。在您的情况下,您正在保存捆绑包,然后再放入一些数据

    用这个替换你的代码(注意我刚刚更新了你的代码)

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putInt(SELECTED_ITEM_POSITION,mPosition); // put the values
        super.onSaveInstanceState(outState); // then store the bundle
    
    }