我正在开发一个应用程序来识别树。因此,我让用户通过从微调器中选择适当的特性来回答关于给定特性的问题。由于一棵树有很多特征,我有一个完整的spinners列表。到现在为止还挺好。不幸的是,只要用户将它们从屏幕上滚动下来,纺纱厂就会重置。这是至关重要的,我可以避免这一点!列表视图中的Spinners
所以:我该如何避免这种情况?
我非常感谢您的帮助!
public class SearchAdapter extends ArrayAdapter<SearchItem>{
SearchAdapter() {
super(SearchWizard.this, R.layout.question);
}
public View getView(int position, View convertView, ViewGroup parent) {
View ret = convertView;
if (ret == null) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ret = inflater.inflate(R.layout.question, null);
}
SearchItem item = getItem(position);
String question = item.getQuestion();
TextView question_text = (TextView) ret.findViewById(R.id.question_search);
assert(question_text != null);
question_text.setText(question);
Spinner question_spinner = (Spinner) ret.findViewById(R.id.question_spinner);
assert(question_spinner != null);
question_spinner.setPrompt(question);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(SearchWizard.this,android.R.layout.simple_spinner_item, item.getOptions());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
question_spinner.setAdapter(adapter);
question_spinner.setOnItemSelectedListener(new MyOnItemSelectedListener(position));
question_spinner.setSelection(2);
return ret;
}
}
enter code herepublic class MyOnItemSelectedListener implements OnItemSelectedListener {
public int position;
public MyOnItemSelectedListener(int p) {
position = p;
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
LSsearchCriteria.set(position,Herbalist.encodeoptions(parent.getItemAtPosition(pos).toString()));
}
public void onNothingSelected(AdapterView<?> parent) {
// Do nothing.
}
}
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public int position;
public MyOnItemSelectedListener(int p) {
position = p;
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
LSsearchCriteria.set(position,Herbalist.encodeoptions(parent.getItemAtPosition(pos).toString()));
}
public void onNothingSelected(AdapterView<?> parent) {
// Do nothing.
}
}
您可以发布您的代码,请?我们不知道你是否有额外的听众或者弄乱了你的代码。 – 2011-06-14 19:32:06
我发布了源代码。请注意,微调器在选择2时正确初始化。一旦它再次滚动并在屏幕上显示,就会显示选择0! – RangerJo 2011-06-16 14:38:56
在上面的代码中,当选择一个项目时,MyOnItemSelectedListener会做什么?我问,因为我认为在设置监听器之后立即调用setSelection(2)时它会被解雇。 – 2011-06-16 14:47:38