2011-07-10 10 views
13

私のアプリでは、ユーザは異なる基準でダウンロードする記事を選択することができます。そのうちの1つは年と月です。このために、AlertDialogには年のリストが必要です。ユーザーはその後、年をクリックすると、リストは拡大し、1月が表示されます、2月など拡張可能リストAlertDialogを作成できますか?

私はSimpleExpandableListAdapterを使用して拡張可能リストビューを作る方法を知っているが、それは私が欲しいものではありません。他の基準(カテゴリなど)もAlertDialogのリストなので、ルック・アンド・フィールで似たものが欲しい。

このような拡張可能なリストAlertDialogを実行することは可能ですか?

SOLUTION

これは私がCommonsWareのソリューションをもとにしてしまったものです:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Select something"); 

ExpandableListView myList = new ExpandableListView(this); 
MyExpandableListAdapter myAdapter = new MyExpandableListAdapter(); 
myList.setAdapter(myAdapter); 

builder.setView(myList); 
AlertDialog dialog = builder.create(); 
dialog.show(); 

唯一の問題残り:どのように私はAlertDialogのonclickリスナーを実装していますか?通常はsetItems()メソッドで行いますが、setItemsを使用していません。

myList.setAdapter()の後にmyList.setOnItemClickListenerを追加しましたが、無視されます。問題をクリックし

myList.setOnItemClickListener(new ListView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> a, View v, int i, long l) { 
     try { 
      Toast.makeText(ExpandableList1.this, "You clicked me", Toast.LENGTH_LONG).show(); 
     } 
     catch(Exception e) { 
      System.out.println("something wrong here "); 
     } 
    } 
}); 

ソリューション::私はアイテムをクリックしても何も起こらない

ソリューションは非常に簡単でした。展開可能なリストなので、アイテムのクリックはリスト自体によって取得され、子要素が開きます。したがって、イベントハンドラは決して呼び出されません。

代わりにOnChildClickListener()を実装する必要があります。名前が示すように、子のクリックを聞きます!

答えて

9

setView()を使用し、ExpandableListViewを渡して、Javaコードで膨張させたり作成したりして、アダプタをオンに設定してください。

+0

私はAndroidでかなり新しいですが、私は試してみてください... – marlar

+0

私は少しこれを取り組んで、私は基本的なアイデアを得るが、どのようにリストビューを作成するのですか?通常、私はアクティビティを作成し、xmlからそれを膨張させますが、この場合はダイアログ以外ではリストビューを表示しません。だから私はどうにかしてメインのアクティビティの中で展開可能なリストビューを作成し、setViewを使ってそれを渡す必要があります。それ、どうやったら出来るの?ありがとう。 – marlar

+0

@marlar: 'ExpandableListView'を含むレイアウトXMLリソースを膨張させるか、Java(例えば、新しいExpandableListView(this)')を介してレイアウトXMLリソースを膨張させます。 – CommonsWare

1

リストビューを使用するには、適切なリストアクティビティを拡張する必要があります。ケースでは、ExpandableListActivityです。拡張可能なExpandableListDialogを見つけることはできません。

これは、ダイアログを呼び出すアクティビティに実装して、ダイアログボックスのlistviewを参照として渡し、手動でダイアログボックスのレイアウトに追加できると思います。 D

0

でも、特定のアクティビティのマニフェストファイルにandroid:theme="Theme.Dialog"を作成することができます。

関連する問題