4

当我的应用程序的方向更改时,操作栏中的标题会从导航抽屉中选择的片段的标题更改为应用程序的标题。

导航抽屉示例应用程序在方向更改时保留其标题,因为它的片段是主要活动的子类,并且具有这行代码

getActivity().setTitle(planet);

现在我有点新手,所以我不知道如何保留标题并实现代码,你们能帮忙吗?

以防万一你们想看,这里是 PlanetFragment 的子类

public static class PlanetFragment extends Fragment {
    public static final String ARG_PLANET_NUMBER = "planet_number";

    public PlanetFragment() {
        // Empty constructor required for fragment subclasses
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_planet, container, false);
        int i = getArguments().getInt(ARG_PLANET_NUMBER);
        String planet = getResources().getStringArray(R.array.planets_array)[i];

        int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()),
                        "drawable", getActivity().getPackageName());
        ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId);
        getActivity().setTitle(planet);
        return rootView;
    }
}
4

4 回答 4

7

导航抽屉示例应用程序,这里我做了什么:

  • onSaveInstanceState()您的活动中:

    @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); CharSequence title = mDrawerLayout.isDrawerOpen(mLeftDrawer) ? mDrawerTitle:mTitle; outState.putCharSequence(KEY_STATE_TITLE, title); }

  • onCreate()您的活动中:

    if (saveInstanceState!=null) { setTitle(savedInstanceState.getCharSequence(KEY_STATE_TITLE)); }

希望这有帮助。

于 2014-03-18T10:58:43.037 回答
4

@maohieng 的回答对我有帮助,但如果抽屉在方向更改时打开(它是屏幕名称,而不是应有的应用程序标题),则会设置错误的标题。所以我实现了这段代码,完美地解决了这个问题。

onSaveInstanceState()我使用布尔值检查抽屉是否打开。看起来很奇怪,但是isDrawerOpen(mDrawer)当我在 onCreate() 上调用它时,在方向改变后返回 false:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putCharSequence("title", mTitle);
    outState.putBoolean("isDrawerOpen",
            mDrawerLayout.isDrawerOpen(mDrawerLinear));
}

活动onCreate()时间:

if (savedInstanceState == null) {
    selectItem(YOUR_FRAGMENT);
} else {
    if (savedInstanceState.getBoolean("isDrawerOpen")) {
        mTitle = savedInstanceState.getCharSequence("title");
    } else {
        setTitle(savedInstanceState.getCharSequence("title"));
    }
}
于 2014-04-18T15:05:35.633 回答
1

找到了一种在方向更改时在操作栏中保留碎片标题的方法,不确定是否是最好的方法,但对我来说似乎很干净。

public class Example extends Fragment{

private String[] titleList;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    titleList = getResources().getStringArray(R.array.sell_array);
    getActivity().setTitle(titleList[0]);

    return inflater.inflate(R.layout.fish, container, false);
}


}

每个片段都有各自的阵列位置编号。另外,从主要活动课程中,我取出了不必要的

setTitle(titleList[position]);

从选择任何导航抽屉项目开始,因为现在是从各自的片段类处理的

于 2013-07-22T09:46:22.860 回答
0

你必须添加 setTitle(menuItem.getTitle()); 如下所示,

@Override public boolean onNavigationItemSelected(MenuItem menuItem) {

            //Checking if the item is in checked state or not, if not make it in checked state
            if (menuItem.isChecked()) menuItem.setChecked(false);
            else menuItem.setChecked(true);


            **setTitle(menuItem.getTitle());**
            //Closing drawer on item click
            drawerLayout.closeDrawers();

希望这有帮助。

于 2015-09-18T05:04:36.867 回答