我想到了一些不太优雅的方法来解决这个问题,但我知道我必须遗漏一些东西.
我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 …Run Code Online (Sandbox Code Playgroud) 我有36个微调器,我用一些值初始化了.我用过onItemSelectedListener.像往常一样,用户可以与这些微调器交互,触发onItemSeected函数.
一个问题是调用是在init期间进行的,但我在这里找到了它的解决方案并避免使用全局变量"count"并在onItemSelected中执行代码之前检查count> 36.
我的问题是:用户可以选择单击名为"Previous"的按钮,我必须重置一些微调器值.
我尝试在重置微调器之前将count的值更改为0,然后在重置后将其更改回37,但我已经明白只有在每个其他函数执行完毕后才调用onItemSelected,所以它被称为AFTER count即使微调器值在用户选择后立即设置,也会更改回37.
我需要重复刷新一些微调器而不触发onItemSelected函数.有谁能帮我找到解决方案?谢谢.
我有一个微调器及其适配器。我有一个自定义的列表和一个微调视图。
可以通过两种方式修改微调器的值: - 由用户选择 - 以编程方式
当用户做出选择时,并且只有当这个选择与选择的值不同时,我可能(或不)想要显示第二个活动让他选择一个完成值。
如果用户取消第二个活动,我希望微调器选择不被验证并保持其原始位置。
但是我不想捕捉或能够识别以编程方式进行的更改,以免因无用的选择而惹恼用户。
但我找不到任何方法来做到这一点。
你有想法吗 ?
我能做的最好的是: - 在我的类属性中记住微调器的值, - 触发和 itemSelected 事件并将所选值与记住的值进行比较, - 清空微调器视图,以便新选择不可见(因为它缺少第二个选择可能不完整) - 完成第二个活动 - 根据第二个活动的结果,强制微调器中的旧值或使微调器值可见,这次完成
这样做,并过滤用户点击,我可能总是强制记忆的旧微调器值到我想以编程方式放入的新微调器值。如果我不这样做,事件就会被触发,我没有办法阻止用户进行第二个活动。
你有没有更好的方法来做我的事情?
感谢您的帮助。
奥利弗
Spinner OnclickListener事件执行两次 -
监听器的实现方式如下:
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
Run Code Online (Sandbox Code Playgroud)
问题定义
我想将用户选择的文本保存到数据存储中,当用户从微调器中选择任何项目时,我能够执行此操作.但我的另一项任务是将以前选择的项目(从数据存储中访问)显示为微调器中的选定项目,但每次调用微调器的活动时,微调器都会将第一项显示为默认选定项目,并且在数据存储中也会更改之前的项目项目为默认值.
如何区分"Spinner初始化"和"用户手动选择"事件?