android - 如何防止 onItemSelected 在新实例化的 Spinner 上触发?

标签 android spinner android-spinner

我想到了一些不太优雅的方法来解决这个问题,但我知道我一定错过了一些东西。

我的 onItemSelected 立即触发,而不与用户进行任何交互,这是不受欢迎的行为。我希望 UI 能够等到用户选择某些内容后再执行任何操作。

我什至尝试在 onResume() 中设置监听器,希望这会有所帮助,但事实并非如此。

如何在用户触摸控件之前阻止其触发?

public class CMSHome extends Activity { 

private Spinner spinner;

@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Heres my spinner ///////////////////////////////////////////
    spinner = (Spinner) findViewById(R.id.spinner);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.pm_list, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    };

public void onResume() {
    super.onResume();
    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
}

    public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {

     Intent i = new Intent(CMSHome.this, ListProjects.class);
     i.putExtra("bEmpID", parent.getItemAtPosition(pos).toString());
        startActivity(i);

        Toast.makeText(parent.getContext(), "The pm is " +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}
}

最佳答案

Runnables 的使用是完全错误的。

setOnItemSelectedListener(listener) 之前的初始选择中使用 setSelection(position, false);

通过这种方式,您可以设置没有动画的选择,这会导致调用项目选定的监听器。但监听器为空,因此没有运行任何内容。然后你的听众就被分配了。

因此请遵循以下确切顺序:

Spinner s = (Spinner)Util.findViewById(view, R.id.sound, R.id.spinner);
s.setAdapter(adapter);
s.setSelection(position, false);
s.setOnItemSelectedListener(listener);

关于android - 如何防止 onItemSelected 在新实例化的 Spinner 上触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62174924/

相关文章:

android - 当我们点击android中的按钮时如何显示Spinner-List?

java - Android-我无法在第二个 Activity 上创建 ListView

android - 如何检查 LocationManager.NETWORK_PROVIDER 是否可用?

java - 在不同的微调器上按 Enter 键后如何请求将焦点集中在微调器上

android - 如何获取微调器中的项目数?

android - 带边框的微调器

android - 检测视频文件何时真正写入?

android - aChartEngine 图从 ScrollView 顶部推开

java - 无法在我的 Activity 中显示微调器

android - 在android中动态设置微调器位置?