【问题标题】:How to stop onItemSelected from getting executed when returning from a locked screen从锁定屏幕返回时如何阻止 onItemSelected 执行
【发布时间】: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


【解决方案1】:

问题是onItemSelected是在Spinner初始化之后调用的,解决方法是把mySpinner.setSelection(position, false)放在mySpinner.setOnItemSelectedListener之前 参考this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多