2013-02-25 6 views
1

У меня есть список, содержащий кучу прядильщиков, но когда я просматриваю список, значение для счетчика сбрасывается. Есть ли способ исправить это? Вот как выглядит класс ArrayAdapter.Android - выбор прокрутки исчезает при прокрутке ListView

открытый класс ProductArrayAdapter расширяет ArrayAdapter { закрытый конечный контекст контекста;

private final List<Product> values; 

public ProductArrayAdapter(Context context, List<Product> values) { 
    super(context, R.layout.product_item, values); 
    this.context = context; 
    this.values = values; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.product_item, parent, false); 
    Product availableProduct = values.get(position); 

    ((TextView) rowView.findViewById(R.id.productCode)).setText(Product.getProductName(availableProduct.getProductCode())); 

    ((Spinner) rowView.findViewById(R.id.count)).setAdapter(productCounts); 

    return rowView; 
} 

}

+0

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

+0

ListViews (и другие адаптеры) перерабатывают компоновку в каждой строке, поэтому вам нужно сохранить значения в другом месте. Пожалуйста, смотрите [Turbo-Charge Your UI] (http://www.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html) или [World of ListView] (http://www.google.com/events /io/2010/sessions/world-of-listview-android.html) ведущими разработчиками Android, они подробно описывают эту тему. – Sam

ответ

4

Я был в состоянии заставить его работать, но так как никто не ответил на мой вопрос, я просто опубликовать Решение себе.

Я создал HashMap<Integer,Integer> под названием selectedItems, чтобы сохранить значения ArrayAdapter и установить их в onItemSelected listener. И установите текущий выбранный элемент Spinner на основе HashMap.

 if (selectedItems.get(position) != null) { 
    ((Spinner) rowView.findViewById(R.id.count)).setSelection(selectedItems.get(position)); 
    } 

    ((Spinner) rowView.findViewById(R.id.count)).setOnItemSelectedListener(new OnItemSelectedListener() { 

    public void onItemSelected(AdapterView<?> parent, View view, 
     int pos, long id) { 
     selectedItems.put(position, pos); 
    } 

Надеется, что это полезно для тех, кто еще с той же проблемой в будущем

+0

Итак, где вы устанавливаете «текущий выбранный элемент Spinner на основе HashMap»? –

0

Только в случае, если это помогает любому, я с той же проблемой с ListView, который имел один editText и один spinner и У меня была проблема с обоими этими взглядами. Как только я исправил проблему с editText, используя onFocusChangeListener, а не onTextChangeListener (see solution here - см. Раздел от defpillz), проблема с оборотным исчезла.

Смежные вопросы