gpt4 book ai didi

屏幕旋转后多次调用 Android 微调器 onItemSelected

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:21 25 4
gpt4 key购买 nike

我有一个包含三个微调器的布局。它们的不同之处在于下拉列表中显示的选项。
在我的 onCreateView 中,我有一个设置微调器的方法。在那个方法里面我有这样的东西:

  mySpinner = (Spinner) view.findViewById(R.id.my_spinner);
ArrayAdapter<String> mySpinner =
new ArrayAdapter<String>(getActivity(), R.layout.background,
new ArrayList<String>(Arrays.asList(getResources().getStringArray(R.array.spinner_one_data))));
mySpinner.setDropDownViewResource(R.layout.spinner_text);
mySpinner.setAdapter(mySpinner);
mySpinner.setOnItemSelectedListener(this);

正如我所说,我的另外两个微调器几乎相同,但选项不同。

我知道 onItemSelected 在“第一次设置”中为每个微调器调用一次,所以我有一个标志来防止这个问题。使用此标志解决方案,我的微调器按预期工作。

问题是当我在每个微调器中选择一个选项然后旋转屏幕时。现在,onItemSelected 被调用了 6 次,而不是我预期的 3 次(我设置了一个标志来管理这种调用 3 次的情况)。

为什么会这样,我应该处理这个吗?

最佳答案

一般来说,我发现有许多不同的事件可以触发 onItemSelected 方法,并且很难跟踪所有这些事件。相反,我发现使用 OnTouchListener 仅响应用户启动的更改更简单。

为微调器创建监听器:

public class SpinnerInteractionListener implements AdapterView.OnItemSelectedListener, View.OnTouchListener {

boolean userSelect = false;

@Override
public boolean onTouch(View v, MotionEvent event) {
userSelect = true;
return false;
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (userSelect) {
// Your selection handling code here
userSelect = false;
}
}

}

将监听器作为 OnItemSelectedListener 和 OnTouchListener 添加到微调器:

SpinnerInteractionListener listener = new SpinnerInteractionListener();
mSpinnerView.setOnTouchListener(listener);
mSpinnerView.setOnItemSelectedListener(listener);

关于屏幕旋转后多次调用 Android 微调器 onItemSelected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com