【问题标题】:Implementing Up navigation on fragment在片段上实现向上导航
【发布时间】:2015-01-01 23:34:45
【问题描述】:

我有一个包含 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 中实现向上导航。我该怎么做?

【问题讨论】:

  • getInstance of action bar in that fragment and setDisplayHomeAsUpEnabled 为 false

标签: java android android-fragments android-studio


【解决方案1】:

据我了解,向上导航必须仅在 FragmentB 中有效,而如果显示 FragmentA,则向上导航将被隐藏。如果是这样,那么在 Activity 中,从 onCreate 中删除 getActionBar().setDisplayHomeAsUpEnabled(true);

此外,当您处理菜单点击时,您必须返回 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);
    }
}

在片段A中

@Override
public void onAttach(Activity a) {
    super.onAttach(a);
    a.getActionBar().setDisplayHomeAsUpEnabled(false);
}

在片段B中

@Override
public void onAttach(Activity a) {
    super.onAttach(a);
    a.getActionBar().setDisplayHomeAsUpEnabled(true);
}

【讨论】:

  • 好的现在只出现在 FragmentB 但不显示 toast 并且当我单击向上按钮时不会在 FragmentA 中返回
  • @user1608228 如果显示 FragmentB,我认为您需要转到 FragmentA。如果显示 FragmentA,您不想向上导航,是吗?那么这个问题我就不清楚了。
  • 是的,如果显示 FragmentB,我需要转到 FragmentA,现在向上按钮没问题,但是当我单击时没有任何反应
  • @user1608228 我明白了。原因是 Fragment 没有它的菜单,因此不会调用 onOptionsItemSelected。将onOptionsItemSelected 代码移动到Activity
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多