2013-04-19 26 views
9

tôi tạo ra một AlertDialoglàm mới hoặc thay đổi AlertDialog nhắn

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
... 
AlertDialog alert = builder.create(); 
alert.show(); 

sau một lúc tôi muốn thay đổi thông điệp AlertDialog mà không đóng nó.

là nó có thể?

Trả lời

6

Có, bạn có thể. Ví dụ: nếu bạn tạo hộp thoại của riêng mình, với bố cục của riêng bạn, bạn có thể đặt id cho mỗi chế độ xem và sau đó truy cập từng mẫu (ví dụ: textView) và đặt văn bản mới bất cứ khi nào bạn muốn đến.

+0

Đối với tôi, nó không hoạt động: Sử dụng hộp thoại 'TextView messageView = (TextView) .findViewById (android.R.id.message); messageView.setText ("MyText"); 'sau khi được gọi là' dialog.show() 'không thay đổi văn bản. – user905686

+0

Một lần nữa, tôi đã viết "với bố cục của riêng bạn". Đối với các giải pháp khác, chúng có thể không hoạt động tốt. –

10

Đồng ý với nhà phát triển Android. Bạn cũng có thể sử dụng

TextView messageView = (TextView)alert .findViewById(android.R.id.message); 

Để kiểm soát thông báoTextViewView của AlertDialog. Sau đó, bạn có thể đặt văn bản mới ở đó.

+0

bạn đã thử phương pháp này chưa? – stinepike

+1

Điều này không hoạt động. Câu trả lời của @ Danger là đúng và nó đẹp hơn, chỉ cần sử dụng alert.setMessage() thay vì builder.setMessage(). – qwlice

0

Set OnClickListener ra khỏi setter chính như thế này:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()) 
         .setTitle(getResources().getString(R.string.dialog_title)) 
         .setMessage("Waiting ...") 
         .setNeutralButton(R.string.check, null); 

AlertDialog alertDialog = alertDialogBuilder.create(); 
alertDialog.show(); 

Button b_neutral = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); 
b_neutral.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         TextView tv_message = (TextView) alertDialog.findViewById(android.R.id.message); 
         tv_message.setText("Works ..."); 
    } 
}); 
6

Sử dụng alert.setMessage() thay vì builder.setMessage() Gọi alert.setMessage() và thiết lập thông điệp của bất cứ lúc nào thoại của bạn, bạn muốn.

+2

đây là câu trả lời! – qwlice

+0

Điều quan trọng cần lưu ý là 'alert.setMessage()' ** sẽ không hoạt động trừ khi ** ít nhất bạn đã gọi 'AlertDialog.Builder'' builder.setMessage() 'đầu tiên với' "" 'đầu vào (' null 'đầu vào cũng sẽ không hoạt động). Đây là sự cố đã biết, hãy xem sự cố tại [https://issuetracker.google.com/issues/36913966] (https://issuetracker.google.com/issues/36913966) – Eido95

+0

Sự cố ban đầu được báo cáo trước Android 2.3. Do có nhiều thay đổi đã tồn tại trong Android 4.x so với các phiên bản trước, rất có khả năng vấn đề này không tồn tại trong các phiên bản Android gần đây như 4.2.2 hoặc mới hơn. – Danger

Các vấn đề liên quan