2011-06-14 23 views
0

我正在开发一个应用程序来识别树。因此,我让用户通过从微调器中选择适当的特性来回答关于给定特性的问题。由于一棵树有很多特征,我有一个完整的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. } }
+0

您可以发布您的代码,请?我们不知道你是否有额外的听众或者弄乱了你的代码。 – 2011-06-14 19:32:06

+0

我发布了源代码。请注意,微调器在选择2时正确初始化。一旦它再次滚动并在屏幕上显示,就会显示选择0! – RangerJo 2011-06-16 14:38:56

+0

在上面的代码中,当选择一个项目时,MyOnItemSelectedListener会做什么?我问,因为我认为在设置监听器之后立即调用setSelection(2)时它会被解雇。 – 2011-06-16 14:47:38

回答

0

你需要跟踪纺纱的状态在一个单独的数据结构,并在该行再次束缚,用你保存的状态初始化微调。

+0

感谢您的快速回答。但是当再次绑定Spinner时,会调用什么方法?我可以在哪里(以及如何)重新初始化微调器的状态? – RangerJo 2011-06-15 11:55:58

+0

这取决于您用于列表的适配器的类型。如果你只是实现一个ListAdapter,你可以在'getView()'中进行绑定。如果你使用的是CursorAdapter,它也有一个将被调用的'bindView()'方法。 – 2011-06-15 14:59:09