【发布时间】:2018-01-24 14:54:59
【问题描述】:
我正在使用“片段”来获取包含两个“片段”的布局,因此我的类扩展了“片段”。
我在左侧“片段”上加载了一个“ListView”,在右侧“片段”上我有另一个修改过的“ListView”。在这里,我有一个“微调器”,我必须更改它的颜色。
我有这个代码:
private void loadSpinner(int value) {
//Not relevant code
adapter = new ArrayAdapter<CharSequence>(getActivity().getApplicationContext(), android.R.layout.simple_spinner_item, data);
adapter.setDropDownViewResource(R.layout.spinner);
spinner.setAdapter(adapter);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String value = parent.getItemAtPosition(position).toString();
((TextView) parent.getChildAt(0)).setTextColor(getResources().getColor(R.color.black));
//Some code
}
上面的代码按预期工作直到我旋转我的设备的屏幕。在这里,我在((TextView) parent.getChildAt(0)).setTextColor(getResources().getColor(R.color.black)); 收到nullpointerexception。
如果我评论上面的行,因为我在旋转屏幕之前保存状态,所以在我旋转屏幕后,我的数据会恢复并且一切都按预期工作除了打开的微调器浅色,因此不可见。
我知道我可以创建自己的“微调器”布局并解决此问题,但我想知道如何解决此问题。
【问题讨论】:
-
你在哪里打电话给
loadSpinner? -
@Szymon 嗨。在
onCreateView,我正在这样做spinner = (Spinner) itemDataLayout.findViewById(R.id.availableValues); spinner.setOnItemSelectedListener(this);,并且微调器是从functionX加载的。当我单击左侧listview的一个项目时,函数functionX被调用。如果我来自savedrestoredstate,则从onStart()调用functionX -
您可能在调用
loadSpinner之前触发了onItemSelected,这会设置适配器。您可以通过在onItemSelected和在线spinner.setAdapter()中放置断点来验证顺序,并查看轮换后首先调用的内容 -
@Favolas 如果我在之前的评论中写的是这种情况,您将始终在
onItemSelected中有 NPE,因为 spinner 还没有子项显示。因此,您将有两种选择来解决此问题,但首先您需要检查是否是这种情况。 -
@kiruwka Nop。
loadSpinner先来
标签: android android-layout listview android-fragments