2012-01-16 29 views
8

だから、:Android - AlertDialogのデータを更新しますか?私はそうのようなAlertDialogを作成する場合

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
b.create().show(); 

そして私は、リスト内の項目を更新する、すなわちMyStringArrayは、より多くのまたはより少ない項目を持つように変更されました。私はこれを行う方法を見つけることができないようです。これまで、AlertDialogからListViewを取得しようとしましたが、.setAdapterが機能しないようです。これは適切なアプローチですか、これを行うには良い方法がありますか?

答えて

9

私はこれを自分で試してみませんでしたが、私が構築した他のすべてのアプリから、これがあなたの問題を解決すると確信しています。

代わりにsetItemsを使用しての、setAdapter()方法を使用して試してみて、StringArrayあなたからのデータで初期化されているArrayAdapterに渡します。次に、データが変更されたことが分かったら、getListView()を使用してViewオブジェクトを取得し、そこからgetAdapter()を呼び出して、データセットを直接操作することができます。それをクリアして、必要に応じて再初期化したり、好きなだけアイテムを追加/削除することができます。アダプタオブジェクトから、notifyDataSetChanged()を呼び出すと、アダプタに提供したばかりの新しいデータセットを使用して再描画がトリガされます。

あなたを助ける希望。そうでない場合は教えてください。

DSC

+0

これらのダイアログで作業するとき、私はまだ初心者のビットです。 DialogInterface.OnClickListenerをOnClickListenerとして保持するか、通常のListviewでView.OnClickListenerを使用する必要がありますか? – Paul

+0

私はちょうど私がそれを試すことができるときにそれを尋ねる私の愚かな。 DialogInterface.OnClickListenerのように見える方法です。 – Paul

1

あなたが私に似ているとあなたがMULTICHOICE項目に、たとえば、デフォルトのアダプタを使用したい場合は、方法もあります。

他のアダプタと同様に、文字列配列オブジェクトを更新し、ダイアログインスタンスからアダプタを取得し、適切なアダプタにキャストして無効にします。

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
AlertDialog instance = b.create(); 
instance.show(); 

// Later when you need to update 
MyStringArray[0] = "puf"; 
ListView list = instance.getListView(); 
// Now according to whether you used cursor or array for supplying items to the builder 
// you have to cast adapter to either CursorAdapter or ArrayAdapter 
ArrayAdapter adapter = (ArrayAdapter)list.getAdapter(); 
adapter.notifyDataSetChanged(); 

You can find out more here.

関連する問題