在片段上实现向上导航

时间:2014-11-05 17:02:37

标签: java android android-fragments android-studio

我有一个包含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导航。我怎么能这样做?

1 个答案:

答案 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);
}