2011-07-08 30 views
25

Tôi gặp sự cố với hộp thoại tùy chỉnh.
Hộp thoại của tôi bao gồm TextView, EditText và nút "OK". Sau khi nhấn OK, nó sẽ nhận được văn bản từ trường EditText và gán nó vào biến String "name" được định nghĩa trong Activity.
Mọi thứ dường như hoạt động, không có lỗi vv, tuy nhiên, "văn bản" luôn là Chuỗi trống.
Tôi đã đọc một số chủ đề về các vấn đề như vậy, tuy nhiên tôi không thực sự chắc chắn những điều chỉnh nào tôi nên thực hiện ở đây.
Tôi khá mới với lập trình Android, vì vậy tôi sẽ biết ơn nếu sb có thể giải thích vấn đề với tôi. Cảm ơn trước.Android - Hộp thoại tùy chỉnh - Không thể tải văn bản từ EditText

 final Dialog dialog = new Dialog(MyActivity.this); 
    dialog.setContentView(R.layout.custom_dialog); 
    dialog.setTitle("Title"); 

    final View layout = View.inflate(this, R.layout.custom_dialog, null); 
    Button button = (Button) dialog.findViewById(R.id.dialog_ok); 
    button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

       EditText edit=(EditText)layout.findViewById(R.id.dialog_edit); 
       String text=edit.getText().toString(); 

       name=text; 

       dialog.dismiss(); 
     } 
    }); 


    dialog.show(); 

} 

Trả lời

25

Bạn đang thổi phồng bố cục nơi không cần thiết. Tôi đã sửa mã của bạn khi bạn thấy tôi đã xóa dòng của bạn, nơi nó thổi phồng và thay đổi dòng nơi bạn cố gắng tìm chế độ xem EditText.

final Dialog dialog = new Dialog(MyActivity.this); 
dialog.setContentView(R.layout.custom_dialog); 
dialog.setTitle("Title"); 

Button button = (Button) dialog.findViewById(R.id.dialog_ok); 
button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 

      EditText edit=(EditText)dialog.findViewById(R.id.dialog_edit); 
      String text=edit.getText().toString(); 

      dialog.dismiss(); 
      name=text; 

    } 
}); 


dialog.show(); 
+0

Hoạt động hoàn hảo, cảm ơn. Lỗi của người mới bắt đầu;) – ThunderSS

47

Nếu bạn muốn thổi phồng một file xml vào hộp thoại để tạo phiên bản tùy chỉnh, bạn có thể sử dụng đoạn mã sau đó được hai đầu vào từ người dùng

LayoutInflater linf = LayoutInflater.from(this);    
final View inflator = linf.inflate(R.layout.twoinputs, null); 
AlertDialog.Builder alert = new AlertDialog.Builder(this); 

alert.setTitle("Tilte"); 
alert.setMessage("Message"); 
alert.setView(inflator); 

final EditText et1 = (EditText) inflator.findViewById(R.id.editText1); 
final EditText et2 = (EditText) inflator.findViewById(R.id.editText2); 

alert.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
      String s1=et1.getText().toString(); 
      String s2=et2.getText().toString(); 
      //do operations using s1 and s2 here... 
    } 
}); 

alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
      dialog.cancel(); 
    } 
}); 

alert.show(); 
+2

mã java rất sạch sẽ !! – BlaShadow

+0

nó hoạt động hoàn hảo. Cảm ơn –

+0

Mã tuyệt vời! Cảm ơn! Đã lãng phí một giờ cố gắng tìm ra cách sử dụng Phân đoạn hộp thoại và không có hướng dẫn nào đủ rõ ràng để phù hợp với những gì tôi muốn !!! –

2

Một thay thế cho matsjoe và krishna (cả hai công việc):

builder.setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() { 
    //@Override 
    public void onClick(DialogInterface dialog, int id) { 
     // sign in the user ... 

     Dialog dialogObj =Dialog.class.cast(dialog); 
     EditText etUsr=(EditText) dialogObj.findViewById(R.id.username_id_value); 
     userStr = etUsr.getText().toString();  
    } 
    } 
); 

Kf

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