Android Spinner和工具栏(android.support.v7.widget.Toolbar)

时间:2014-11-13 10:01:58

标签: android android-arrayadapter android-spinner android-toolbar

当我注意到Actionbar的大多数导航选项都在弃用时,我很快就开始用新的Android工具栏替换Actionbar。工作得很好我仍然遇到问题。我的工具栏中有一个微调器,内容在旋转时消失。

我的工具栏位于MainActivity的布局中,如下所示:

<android.support.v7.widget.Toolbar
        android:id="@+id/act_main_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
</android.support.v7.widget.Toolbar>

在MainActivity中的onCreate中,我正在膨胀菜单按钮,徽标和微调器

mToolbar.setLogo(R.drawable.action_bar_icon);
Toolbar.inflate(this, R.layout.toolbar_spinner, mToolbar);
mToolbar.inflateMenu(R.menu.toolbar_menu);

在屏幕旋转时,Spinner的内容消失,微调器仍然只是空的。包含元素的SpinnerAdapter仍包含它们,就像已从工具栏中取消适配器一样。

编辑SpinnerAdapter创建的更新代码:

适配器设置在片段的onCreate中:

mToolbar = (Toolbar) getActivity().findViewById(R.id.act_main_toolbar);
mToolbarSpinner = (Spinner) mToolbar.findViewById(R.id.act_main_toolbar_spinner);
mToolbarSpinner.setAdapter(adapter);

然后我有asyncTasks检索数据,一旦检索完成,我使用以下调用来显示数据:

adapter.notifyDataSetChanged()

修改2

出现此问题是因为在屏幕旋转后对onCreate中创建的mToolbar的引用变得有问题。通过将以下内容移动到onCreateView,它开始工作:

mToolbar = (Toolbar) getActivity().findViewById(R.id.act_main_toolbar); //This fixed it!
mToolbarSpinner = (Spinner) mToolbar.findViewById(R.id.act_main_toolbar_spinner);
mToolbarSpinner.setAdapter(adapter);

1 个答案:

答案 0 :(得分:1)

在屏幕方向更改后,片段中对mToolbar的引用不再正确。通过在 onCreateView 而不是 onCreate 中获取对mToolbar的新引用来解决此问题:

mToolbar = (Toolbar) getActivity().findViewById(R.id.act_main_toolbar);