3

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クラスは、Parcelableを実装するPOJOです。

前もって感謝します

ジェフ

4

1 に答える 1

0

わかりました、私は間違っていて、adamp は正しかったです。

問題は初心者のものでした。子アクティビティのバンドルから取得したアイテムを更新していました。制御が元のアクティビティに戻されたとき、元のアクティビティは unchangwd でした。

于 2011-03-09T04:40:15.320 に答える