我有一个包含FragmentA的MainActivity。当我点击FragmentA时,会发生这种情况:
getFragmentManager().beginTransaction().replace(R.id.container,new PrefFragment()).addToBackStack("back").commit();
我的清单中有这个:
<activity>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
这在MainActivity中:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_head_sound);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new FragmentA)
.commit();
}
getActionBar().setDisplayHomeAsUpEnabled(true);
}
但是向上按钮导航始终可见。
FragmentB包含以下代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id=item.getItemId();
switch (id)
{
case android.R.id.home:
getFragmentManager().popBackStack();
Toast.makeText(getActivity(),"CLick",Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
此代码无法运行。 我只需要在FragmentB中实现Up导航。我怎么能这样做?
答案 0 :(得分:2)
据我所知,向上导航必须仅在FragmentB中起作用,而如果显示FragmentA则将隐藏向上导航。如果是,则在“活动”中,从getActionBar().setDisplayHomeAsUpEnabled(true);
中删除onCreate
。
当你处理菜单点击时,你必须返回true,并将onOptionsItemSelected(MenuItem)移动到Activity,因为android.R.id.home菜单点击仅传递给Activity。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getFragmentManager().popBackStack();
Toast.makeText(getActivity(),"CLick",Toast.LENGTH_SHORT).show();
return true; //Notice you must returning true here
default:
return super.onOptionsItemSelected(item);
}
}
在FragmentA中
@Override
public void onAttach(Activity a) {
super.onAttach(a);
a.getActionBar().setDisplayHomeAsUpEnabled(false);
}
在FragmentB中
@Override
public void onAttach(Activity a) {
super.onAttach(a);
a.getActionBar().setDisplayHomeAsUpEnabled(true);
}