【发布时间】:2017-01-10 22:47:44
【问题描述】:
我只有一个片段使用替换附加到一个活动。当设备在几秒钟后锁定屏幕然后我解锁它时,分配给某些微调器的 onItemSelected 方法将被执行,即使片段视图(EditTexts 等)和微调器选定的项目保持不变。
public class MyFragment extends Fragment {
private Spinner mySpinner;
public static MyFragment newInstance() {
return new MyFragment();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.some_layout, container, false);
mySpinner = (Spinner)view.findViewById(R.id.my_spinner);
List<String> items = new ArrayList<>();
items.add("Anything");
items.add("Anything");
items.add("Anything");
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(
getContext(),
android.R.layout.simple_spinner_item,
items);
mySpinner.setAdapter(adapter);
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getContext(), "Hello World", Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}
每次我选择一个项目时,我都会收到消息“Hello World”(或分配给侦听器的任何其他方法或操作),但是当设备锁定然后我解锁时,我仍然会收到消息,好像调用了 onItemSelected 方法。
我一直在尝试使用布尔值和 Fragment 的 onSaveInstanceState 和 onActivityCreated 方法,但我还没有找到一种方法来阻止 onItemSelected 方法在设备从锁定屏幕返回时执行。
【问题讨论】:
-
你必须这样做吗?您不太可能希望微调器最终只是发出祝酒词。您可能会设置一些值以便随后使用。例如您可能会执行
myspinnerselecteditem = my.Spnner.getSecltedItem()之类的操作,在这种情况下,设置多次是否重要? -
是的,微调器会根据所选项目执行不同的操作,但这没关系,因为我的问题是从锁定屏幕返回时会执行 onItemSelected。
标签: android android-fragments spinner onitemselectedlistener