Как получить представление с адаптера Android из элемента

Учитывая элемент, который отображается в ListView,

Могу ли я использовать его адаптер (или сам ListView), чтобы найти представление, которое отображает элемент?

Я обрабатываю сохранение данных элемента и должен передать изменение обратно в ListView. Добавление элемента заставляет его отображаться с помощью notifyDataSetChanged(), но измененные элементы не перерисовываются с помощью notifyDataSetChanged()

Вот код моей активности, который редактирует элемент:

@Override
public void onClick(View button) {
    EditText text = (EditText)(findViewById(R.id.itemText));
    if (item == null) {
       // Add - this path updates ListView
       ItemsAdapter.instance().items.add(new Item(text.getText().toString()));
    } else {
       // Save - this path does not update ListView
       this.item.setTitle(text.getText().toString());
    }
    ItemsAdapter.instance().notifyDataSetChanged();
    this.finish(); // Close activity
}

Соответствующие части моего адаптера:

public class ItemsAdapter extends BaseAdapter {
    ArrayList<Item> items = new ArrayList<Item>();

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Item item = (Item)getItem(position);
        // ItemTextView is a subclass of TextView which keeps a reference to the item
        // So that in my OnClickListener, I can get the underlying Item and edit it
        ItemTextView textView = null;
        if (convertView == null) {
            textView = new ItemTextView(context, item);
            // Associate with itemListener which opens edit activity for item
            textView.setOnClickListener(itemListener);
            textView.setTextSize(16);
            textView.setPadding(5, 5, 5, 5);
        } else {
            textView = (ItemTextView) convertView;
            textView.setItem(item);
        }

        return textView;
    }
}

А класс Item — это POJO, который реализует Parcelable.

Заранее спасибо

Джефф


person theschmitzer    schedule 01.03.2011    source источник
comment
Вероятно, есть лучший способ сделать то, что вы пытаетесь сделать. Может быть, вы могли бы опубликовать свой код активности?   -  person Matthew Willis    schedule 02.03.2011
comment
+1. Напишите код адаптера. notifyDataSetChanged должен инициировать ListView для повторного заполнения содержимого списка, отражающего измененные элементы.   -  person adamp    schedule 02.03.2011


Ответы (1)


Ладно, я был неправ, а Адамп был прав.

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

person theschmitzer    schedule 09.03.2011