2012-03-19 5 views
25

私は、その中にedittextビューを持つダイアログを表示し、ポジティブ/ネガティブボタンを聴いて、それぞれのカスタムアクションを実行する(そのedittextを読んで内容を保存する)アクティビティー変数へ)。Androidのダイアログインナー内部ダイアログの表示を取得

問題は、現在のダイアログをダイアログインターフェイスから復元する方法が見つからない場合に発生し、ダイアログ内のビューを復元できません。

おそらくそれは問題のはずですが、Google検索の後には、私は答えがありません。

私のコードは次のよう

LayoutInflater li = LayoutInflater.from(this); 
View myView = li.inflate(R.layout.my_layout, null); 

AlertDialog.Builder cDialog = new AlertDialog.Builder(this); 
cDialog.setView(myView); 
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
    //here the code to retrieve dialog 
    } 
}); 
cDialog.create(); 

私はそれを見つけることができる場所についての任意の手がかりとなりますか?

答えて

61

あなたはとonClick()Dialogからのビューを取得することができます。この方法では、私のコードで完璧に実行

EditText edit = (EditText) ((AlertDialog) dialog).findViewById(R.id.the_id_of_view); 
+0

こんにちはslukian。私はそれをしようとしましたが、そのインスタンスはダイアログではなくDialogInterfaceクラスからです。 DialogInterfaceはfindViewByIdメソッドを提供していません...そのため、指定されたダイアログの内容を取得することは役に立ちません。 – user1220817

+2

@ user1220817 'dialog'パラメータは、クリックを受け取ったダイアログです。 'AlertDialog'にキャストし、' EditText edit =(EditText)((AlertDialog)ダイアログ).findViewById(R.id.editText1); 'のように' findViewById() 'を呼び出してください。 – Luksprog

+0

ああいいね! DialogInterfaceを直接ダイアログにキャストできることに気付かなかった。再びありがとう :) – user1220817

13

public void onClick(DialogInterface dialog, int which) { 

    Dialog dialog2 =Dialog.class.cast(dialog); 
    EditText edit = (EditText) dialog2.findViewById(R.id.myedittext); 

} 

歓声

4

あなたは既にへの参照を持っています編集テキストを含むビュー。なぜそれを直接使用しないのですか? OnClickListener匿名クラスでアクセスできるように、最終的なビューを作成するようにしてください。

LayoutInflater li = LayoutInflater.from(this); 
final View myView = li.inflate(R.layout.my_layout, null); 
// don't forget to mark myView as final 

AlertDialog.Builder cDialog = new AlertDialog.Builder(this); 
cDialog.setView(myView); 
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
    //here the code to retrieve dialog 
    EditText edit = (EditText) myView.findViewById(R.id.the_id_of_view); 
    } 
}); 
cDialog.create(); 
-1

show() alertBuidlerから返されたDialogを取得できます。

AlertDialog.Builder adb = new AlertDialog.Builder(YourActivity.this); 
//...code to add methods setPositive an setNegative buttons 

adbshow()メソッドを呼び出し、以下のようにDialogを取得:

final AlertDialog dialog = adb.show(); 

ですから、あなたの活動のコードの任意の時点で、あなたのダイアログのいずれかのボタンを呼び出すことができます。

dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).performClick(); 
関連する問題