私はこのアイテム構造を持つArrayAdapterを持っています:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ... >
<TextView
Android:id="@+id/itemTextView"
... />
</RelativeLayout>
そして、このアダプターを追加します:
mAdapter = new ArrayAdapter<String>(this, R.layout.item,
R.id.itemTextView, itemsText);
すべて順調ですが、アダプターのアイテムのテキストを更新したいです。私は解決策を見つけました
mAdapter.notifyDataSetChanged();
しかし、それを使用する方法を理解していません。助けてください。
pd私のコード:
String[] itemsText = {"123", "345", "567"};
ArrayAdapter<String> mAdapter;
onCreate
mAdapter = new ArrayAdapter<String>(this, R.layout.roomitem,
R.id.itemTextView, itemsText);
setListAdapter(mAdapter);
itemsText = {"789", "910", "1011"};
onClick
mAdapter.notifyDataSetChanged();
//it's dont work
こんな感じ
public void updatedData(List itemsArrayList) {
mAdapter.clear();
if (itemsArrayList != null){
for (Object object : itemsArrayList) {
mAdapter.insert(object, mAdapter.getCount());
}
}
mAdapter.notifyDataSetChanged();
}
あなたの問題は典型的なJavaポインターのエラーです。
最初のステップでは、配列を作成し、この配列をアダプターに渡します。
2番目のステップでは、新しい情報を使用して新しい配列を作成します(新しいポインターが作成されます)が、アダプターはまだ元の配列を指しています。
_// init itemsText var and pass to the adapter
String[] itemsText = {"123", "345", "567"};
mAdapter = new ArrayAdapter<String>(..., itemsText);
//ERROR HERE: itemsText variable will point to a new array instance
itemsText = {"789", "910", "1011"};
_
したがって、新しいものを作成する代わりに、配列の内容を更新するという2つのことができます。
_//This will work for your example
items[0]="123";
items[1]="345";
items[2]="567";
_
...または私がやろうとしていることは、リストを使用するようなものです:
_List<String> items= new ArrayList<String>(3);
boundedDevices.add("123");
boundedDevices.add("456");
boundedDevices.add("789");
_
そしてアップデートでは:
_boundedDevices.set("789");
boundedDevices.set("910");
boundedDevices.set("1011");
_
より多くの情報を追加するには、実際のアプリケーションでは通常、リストアダプターのコンテンツをサービスまたはコンテンツプロバイダーからの情報で更新するため、通常、アイテムを更新するには次のようにします。
_//clear the actual results
items.clear()
//add the results coming from a service
items.addAll(serviceResults);
_
これにより、古い結果をクリアし、新しい結果をロードします(新しい結果には異なる数のアイテムが必要だと考えてください)。
もちろん、データを更新した後、notifyDataSetChanged()
への呼び出しを行います。
疑問がある場合は、コメントすることをheしないでください。
ItemTextをString配列またはString ArrayListとして、新しいアイテムをitemsTextに追加する場合、その時点で呼び出すことができます
mAdapter.notifyDataSetChanged();
回答が得られなかった場合は、コードを入力してください。