2012-03-19 37 views
25

Tôi có một chương trình đơn giản để hiển thị hộp thoại, với chế độ xem văn bản trong đó và nghe các nút tích cực/tiêu cực để thực hiện tác vụ tùy chỉnh trong mỗi (đọc edittext đó và lưu nội dung của nó) vào biến hoạt động).Hộp thoại Android có giao diện hộp thoại bên trong

Sự cố phát sinh khi tôi không thể thấy bất kỳ cách nào để khôi phục hộp thoại hiện tại của mình từ giao diện hộp thoại (và sau đó, tôi không thể khôi phục bất kỳ chế độ xem nào trong hộp thoại).

Có thể đó là câu hỏi noob, nhưng sau một số tìm kiếm trên google, tôi không có ai trả lời câu hỏi đó.

Mã của tôi là sau

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

Bất kỳ manh mối về nơi tôi có thể tìm thấy điều đó không?

Trả lời

61

Bạn có thể lấy các quan điểm từ Dialog trong onClick() với:

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

Chào Slukian. Tôi đã cố gắng làm điều đó, nhưng trường hợp đó là từ lớp DialogInterface, không phải hộp thoại. DialogInterface không cung cấp phương thức findViewById ... do đó không hữu ích khi truy xuất nội dung của hộp thoại đã cho. – user1220817

+2

@ user1220817 Tham số 'hộp thoại' đó là hộp thoại nhận được lần nhấp. Đưa nó vào 'AlertDialog' và sau đó gọi' findViewById() 'như sau:' EditText edit = (EditText) ((AlertDialog) dialog) .findViewById (R.id.editText1); '. – Luksprog

+0

Rất tuyệt! cảm ơn bạn rất nhiều, đã không nhận thấy rằng DialogInterface có thể được truyền trực tiếp vào hộp thoại. Một lần nữa, cảm ơn bạn :) – user1220817

13

Bằng cách này chạy hoàn hảo trong mã của tôi:

public void onClick(DialogInterface dialog, int which) { 

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

} 

cổ vũ

4

Bạn đã có tham chiếu đến Chế độ xem có văn bản chỉnh sửa. Tại sao không sử dụng nó trực tiếp? Chỉ cần đảm bảo bạn thực hiện chế độ xem cuối cùng để bạn có thể truy cập nó trong lớp ẩn danh 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

Bạn có thể nhận hộp thoại được trả về từ phương thức show() alertBuidler.

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

Gọi show() phương pháp adb và nhận Dialog như sau:

final AlertDialog dialog = adb.show(); 

Vì vậy, bạn có thể gọi bất kỳ nút nào của hộp thoại của bạn tại bất kỳ điểm nào của mã trong hoạt động của bạn:

dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).performClick(); 
Các vấn đề liên quan