【问题标题】:Android setting fragment toolbar titleAndroid设置片段工具栏标题
【发布时间】:2017-05-17 02:38:00
【问题描述】:

我在片段事务中遇到了一些小错误。当我打开多个片段并按下后退按钮并且工具栏上显示的标题错误时,就会出现问题。

例如,在我的Home -> Expenses fragment 中,我从费用片段中按下后退按钮,工具栏上显示的标题是正确的。

但是,假设Home -> Expenses -> Incomes fragment,我从收入片段按返回按钮,它将返回主页片段,但工具栏上显示的标题将是“费用”而不是“主页”。

这是我对 MainActivity 的设置,它扩展了 AppCompatActivity:

 // inside onCreate() put all these code
//Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

        // This method will trigger on item Click of navigation menu
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {

            //Checking if the item is in checked state or not, if not make it in checked state
            if(menuItem.isChecked()) menuItem.setChecked(false);
            else menuItem.setChecked(true);

            //Closing drawer on item click
            drawerLayout.closeDrawers();

            //Check to see which item was being clicked and perform appropriate action
            final Bundle bundle = new Bundle();
            switch (menuItem.getItemId()){

                case R.id.home:
                    getSupportActionBar().setTitle("Home");
                    return true;

                case R.id.expenses:
                    return true;

                case R.id.incomes:
                    return true;

                case R.id.history:
                    return true;

                case R.id.setting:
                    return true;
            }
        }
    });

然后在我扩展 Fragment 的每个片段中,我设置标题并覆盖后退按钮:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.activity_expense,container,false);

    ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Expenses");
    // override on back key pressed back to main fragment
    v.setFocusableInTouchMode(true);
    v.requestFocus();
    v.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if( keyCode == KeyEvent.KEYCODE_BACK ) {
                getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Home");
                return true;
            } else {
                return false;
            }
        }
    });

    return v;
}

我什至添加了这一行((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Home"); 以在单击后退按钮时设置标题,但这是徒劳的。

【问题讨论】:

  • 有什么想法吗?我的问题不清楚吗?
  • 你为什么要这样处理后退按钮?
  • 我在网上找到的,直接回到我的主要片段。
  • 这样尝试: 1. 在你的活动中以这种方式覆盖 onBackPress:@Override public void onBackPressed() { if (count == 0) { super.onBackPressed(); } else { getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); } } 2. 移除fragment的KeyListener。

标签: java android android-fragments toolbar


【解决方案1】:

试试这个方法: 1. 在你的活动中覆盖 onBackPress:

 @Override public void onBackPressed() {
     if (count == 0) { 
         super.onBackPressed(); 
     }
    else {
         getSupportFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    }
 }    
  1. 移除片段的 KeyListener。

【讨论】:

  • 它告诉我方法不会覆盖其超类错误消息中的方法
  • 在你的活动中?
  • 我其实是从 Fragment 扩展而来的
  • 是的,我知道,但是您应该在包含片段的活动中覆盖 onBackPress 方法。
  • 抱歉,您是指主要片段?但是在我上面提到的情况下,工具栏标题仍然不对
【解决方案2】:

((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("片段标题"); 只需将这一行放在 onCreateView() 片段中即可。

并且不要覆盖片段中的后退按钮在活动中覆盖它。

【讨论】:

  • 所以你的意思是我应该把 onKey 放在 MainActivity 而不是所有的 Fragment onCreateView()?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多