我有一个加载片段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)。
答案 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;
}