Спиннеры в виде списка - PullRequest
0 голосов
/ 14 июня 2011

Я работаю над приложением для идентификации деревьев. Поэтому я позволяю пользователю отвечать на вопросы о заданных характеристиках, выбирая соответствующую характеристику из счетчика. Поскольку у дерева много характеристик, у меня есть целый список блесен. Все идет нормально. К сожалению, счетчики сбрасываются, как только пользователь прокручивает их с экрана. Важно, что я могу избежать этого!

Итак: как мне этого избежать?

Я очень ценю вашу помощь!

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 {</p>

<code>    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.
    }
}
</code>

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

Вместо этого используйте Spinner.setSelection (i, true).

Слава перейти к Саги в http://sagistech.blogspot.com/2010/12/spinnersetselection-doesnt-work.html

0 голосов
/ 14 июня 2011

Вам нужно будет отслеживать состояние счетчиков в отдельной структуре данных, и когда эта строка снова будет связана, инициализируйте счетчик с сохраненным состоянием.

...