如何在屏幕旋转时修复导航抽屉标题更改的问题?

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个回答

7
导航抽屉示例应用程序,这是我所做的:
  • 在 Activity 的 onSaveInstanceState() 方法中:

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

  • 在 Activity 的 onCreate() 方法中:

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

希望这能有所帮助。

应该是 getActivity().setTitle() - gegobyte

4

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

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

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

在 Activity 的 onCreate() 方法中:

if (savedInstanceState == null) {
    selectItem(YOUR_FRAGMENT);
} else {
    if (savedInstanceState.getBoolean("isDrawerOpen")) {
        mTitle = savedInstanceState.getCharSequence("title");
    } else {
        setTitle(savedInstanceState.getCharSequence("title"));
    }
}

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]);

从现在开始,任何导航抽屉项目的选择都将由相应的片段类处理。

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();

希望这可以帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接