2012-03-19 17 views
25

İçinde edittext bir görüntüyü göstermek ve pozitif/negatif düğmeleri dinlemek, her birinde özel bir eylem yapmak için basit bir program (edittext oku ve içeriğini kaydet) bir aktivite değişkenine).Android dialoginterface iç iletişim görünümleri olsun

Geçerli iletişim penceremi iletişim arabiriminden kurtarmanın herhangi bir yolunu göremediğimde sorun ortaya çıkıyor (ve sonra, iletişim kutusundaki herhangi bir görünümü geri yükleyemiyorum).

Muhtemelen bir noob sorusu, ancak bazı Google aramalarından sonra, hiç kimse yanıtlamam.

Benim kodudur

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(); 

Bunu nerede bulacağınız konusunda herhangi bir ipucu aşağıdaki?

cevap

61

Sen ile onClick() yılında Dialog manzaranın alabilirsiniz Düzenleme metnine sahip olan görünüm. Neden doğrudan kullanmıyorsunuz? Görüntüyü son haline getirdiğinizden emin olun, böylece OnClickListener anonim sınıfına erişebilirsiniz.

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(); 
+0

:

final AlertDialog dialog = adb.show(); 

Yani aktivitesinde kodun herhangi bir noktada diyalog herhangi bir düğmeye çağırabilir Merhaba slukian. Bunu yapmaya çalıştım, ancak bu örnek DialogInterface sınıfından değil iletişim kutusundan. DialogInterface, findViewById yöntemini sağlamaz ... bu nedenle, belirtilen iletişim kutusunun içeriğini almak yararlı olmaz. – user1220817

+2

@ user1220817 Bu 'iletişim' parametresi, tıklamayı alan iletişim kutusu. Bunu 'AlertDialog' olarak adlandırın ve sonra 'findViewById() 'yi şöyle adlandırın:' EditText edit = (EditText) ((AlertDialog) iletişim kutusu) .findViewById (R.id.editText1); '. – Luksprog

+0

Oh güzel! Çok teşekkürler, DialogInterface'in doğrudan diyalog için kullanılabileceğini farketmediniz. Tekrar teşekkür ederim :) – user1220817

4

Zaten referansı var

public void onClick(DialogInterface dialog, int which) { 

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

} 

alkış: my kodunda Bu şekilde mükemmel çalışır

EditText edit = (EditText) ((AlertDialog) dialog).findViewById(R.id.the_id_of_view); 
-1

Sen Diyalog yönteminin show() alertBuidler döndü alabilirsiniz.

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

Çağrı adb ait show() yöntemi ve aşağıda Dialog almak:

dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).performClick();