工具栏后退按钮不会关闭当前片段

时间:2016-04-18 16:05:20

标签: android android-fragments fragmentmanager

我有一个加载片段onCreate的活动。我在该活动上有一个工具栏,其中有一个按钮,单击该按钮将在首先创建的一个上添加一个新的Fragment。

现在在该工具栏上,单击时,我想删除较新的片段,以便它只取代底部的片段(较旧的片段)。我已经搜索过了,除了一件事,我有点想出来了。

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

@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)。

2 个答案:

答案 0 :(得分:0)

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

Android工具栏或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));
 }
});

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

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

答案 1 :(得分:0)

我相信你所寻找的是NavigationListener小工具的Toolbar

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;
}