使用Android目标API 24,minver 15,我正在编写一个基于" One Activity,Multiple Fragments "哲学,我不能去" up"片段的层次结构通过ActionBar上的后退按钮。
手机上物理没问题。
我很高兴,因为即使我发现了许多类似的问题和教程,在这种情况下问题似乎不是导航本身,因为唯一不起作用的是后插入符号
这是当前的Fragment层次结构:
[A] [B]
|
[C]
当我从NavigationDrawer转到Fragments [A]
和[B]
时,一切正常。在Fragment [A]
内,其中包含ListView
,然后我点击了一个元素,该代码将我带到Fragment [C]
,其代码如下:
((MainActivity)getActivity()).mDrawerToggle.setDrawerIndicatorEnabled(false);
((MainActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.frame, new DetailFragment())
.addToBackStack(null)
.commit();
这样,Fragment [C]
显示,汉堡包图标成为后插入符号。我可以导航到之前Fragment [A]
点击Android手机(底部)上的物理后退按钮,但点击后面的插入符号则无效。
其他部分的相关代码,其中包含(错过)执行的评论。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* ... */
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
/* IF I CLICK ON THE "SETTINGS" BUTTON
* IN THE ActionBar, THIS GETS EXECUTED
* BUT IS NEVER EXECUTED ON "BACK CARET" PRESS
*/
int id = item.getItemId();
Toast.makeText(this, "Activity onOptionsItemSelected", Toast.LENGTH_SHORT).show();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
/* THIS GETS EXECUTED WHEN I PRESS THE PHYSICAL
* BACK BUTTON ON THE PHONE
*/
Toast.makeText(this, "BACK", Toast.LENGTH_SHORT).show();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
/* NEVER EXECUTED.*/
Toast.makeText(getActivity(), "Fragment onOptionsItemSelected", Toast.LENGTH_SHORT).show();
switch(item.getItemId()){
case android.R.id.home:
getActivity().onBackPressed();
break;
}
return super.onOptionsItemSelected(item);
}
我已经在SO上阅读了各种Android文档和问题/答案,并且或多或少地实现了所有内容,但没有成功。
如何让ActionBar后退按钮有效?
答案 0 :(得分:0)
((MainActivity)getActivity()).mDrawerToggle.setDrawerIndicatorEnabled(false);
((MainActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.frame, new DetailFragment())//here add add fragment on stack
.addToBackStack(null)
.commit();
答案 1 :(得分:0)
问题是我(嗯,示例NavigationDrawer Android项目)正在使用工具栏。
在这种情况下,要恢复工作,您需要添加以下内容:
mDrawerToggle.setToolbarNavigationClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
}
);
所有常用的方法都不起作用。