【问题标题】:Toolbar back button does not close current Fragment工具栏后退按钮不关闭当前 Fragment
【发布时间】:2016-04-18 16:05:20
【问题描述】:

我有一个加载片段 onCreate 的活动。我在那个活动上有一个工具栏,它有一个按钮,单击该按钮时会在第一个创建的片段之上添加一个新片段。

现在在该工具栏上,单击时,我想删除较新的片段,以便它仅替换底部的片段(较旧的片段)。我已经搜索过了,除了一件事之外,我有点想通了。

我这样做是为了让它尝试查看是否按下了工具栏按钮:

@Override
    public boolean onKeyUp(int keyCode, KeyEvent objEvent) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            onBackPressed();
            return true;
        }
        return super.onKeyUp(keyCode, objEvent);
    }


 @Override
    public void onBackPressed() {
        FragmentManager mFM = getSupportFragmentManager();
        if(mFM.findFragmentByTag("NewFragment") != null){
            mFM.beginTransaction().remove(mFM.findFragmentByTag("NewFragment")).commit();
        }
    }

问题是,当你点击“硬件的后退按钮”而不是工具栏的后退按钮时,“keyCode”只等于KEYCODE_BACK。它给我的是键码 58 而不是 4 (KEYCODE_BACK)。

【问题讨论】:

  • 为什么不添加or 语句与keycode 58.. 类似if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.XY)...

标签: android android-fragments fragmentmanager


【解决方案1】:

我相信您正在寻找的是 NavigationListenerToolbar 小部件:

mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });

但是,如果您使用带有 ActionBar 的主题并设置 supportActionBar,那么请执行以下操作:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case android.R.id.home:
            onBackPressed();
            break;
    }
    return true;
}

【讨论】:

    【解决方案2】:

    从您的问题中不清楚您是在问片段管理问题(FragmentTransaction 删除与替换)还是工具栏按钮问题。我假设后者...

    Android Toolbar 或 ActionBar 应该使用以下方式处理操作:

    @Override
    public Boolean onOptionsItemSelected(MenuItem item)
    {
     switch (item.getItemId())
     {
      case MY_BACK_BUTTON:
        myBackPressedHandler();
        return (true);
     }
     return (false);
    }
    

    这假定您的后退按钮是作为 MenuItem 添加的,并且其 ID 为 MY_BACK_BUTTON。

    对于工具栏,您可以使用 MenuItemClickListener 来处理点击事件:

    mToolbar.setOnMenuItemClickListener(MenuItem menuItem)
    {
     @Override
     public Boolean onMenuItemClick(MenuItem menuItem)
     {
      // call onOptionsItemSelected, or handle the click here directly
      return (thisFragment.onOptionsItemSelected(menuItem));
     }
    });
    

    如果您指的是 Toolbar/ActionBar 上的“向上”按钮,即 setDisplayHomeAsUpEnabled(true),这将具有 android.R.id.home 的 getItemId(),并且可以以类似的方式处理:

    case android.R.id.home:
      myBackPressedHandler();
      return (true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      相关资源
      最近更新 更多