2013-04-30 129 views
0

我用這個代碼來構建一個AlertDialog有一個EditText:安卓:EditText.getText()的toString()不工作

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
builder.setTitle("Title"); 
builder.setView(LayoutInflater.from(context).inflate(R.layout.dialog_view, null)); 
builder.setNegativeButton("Cancel", null); 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     mInput = ((EditText) LayoutInflater.from(context).inflate(R.layout.dialog_view, null).findViewById(R.id.etxtDialog)).getText().toString(); 
    } 
}); 
builder.show(); 

當我雖然運行該代碼,mInput.length()== 0,所以字符串是空的。 mInput = ((EditText) LayoutInflater.from(context).inflate(R.layout.dialog_view, null).findViewById(R.id.etxtDialog)).getText().toString();行被執行,但EditText包含一些字符。爲什麼這個代碼不工作?

+0

拆分這個巨大的長期成每行調用一個方法,並查看單個方法調用的結果。 – Kai 2013-04-30 11:15:06

+0

@Merlin檢查我的答案。您的完整n最終解決方案。 – 2013-04-30 11:21:50

回答

6

你這樣做是錯誤的...保持你膨脹的視圖的實例,並在以後使用它。例如:

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
builder.setTitle("Title"); 
final View v = LayoutInflater.from(context).inflate(R.layout.dialog_view, null); 
builder.setView(v); 
builder.setNegativeButton("Cancel", null); 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     mInput = ((EditText)v.findViewById(R.id.etxtDialog)).getText().toString(); 
    } 
}); 
builder.show(); 
+0

非常感謝!就是這樣! – Xander 2013-04-30 11:23:27

1

用這種方式

ContextThemeWrapper cw = new ContextThemeWrapper(this, R.style.AlertDialogTheme); 
    AlertDialog.Builder builder= new AlertDialog.Builder(cw); 
    LayoutInflater inflater = (LayoutInflater) cw.getSystemService(LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.dialog_view,null);  

    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Title"); 
    builder.setView(layout); 
    mInput = (EditText)layout.findViewById(R.id.etxtDialog); 
    builder.setNegativeButton("Cancel", null); 
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      String value = mInput.getText().toString(); 
     } 
    }); 
    builder.show(); 

這裏:R.style.AlertDialogTheme是您的應用程序的主題

1

這是因爲你在你點擊每次創建一個新的視圖positiveButton(每次調用inflate)。你應該這樣做:

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
builder.setTitle("Title"); 
View v=LayoutInflater.from(context).inflate(R.layout.dialog_view, null); 
builder.setView(v); 
builder.setNegativeButton("Cancel", null); 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     mInput = ((EditText) v.findViewById(R.id.etxtDialog)).getText().toString(); 
    } 
}); 
builder.show(); 
0

試試這個。您的完整和最終解決方案。這是我如何做:

LayoutInflater li = LayoutInflater.from(this); 
    View promptsView = li.inflate(R.layout.prompts, null); 

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 
    alertDialogBuilder.setView(promptsView); 

    final EditText userInput = (EditText) promptsView.findViewById(R.id.editTextDialogUserInput); 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH.mm.ss"); 
    String currentDateandTime = sdf.format(new Date()); 
    userInput.setText(currentDateandTime); 

    alertDialogBuilder.setCancelable(false); 

    alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() 
                { 
                 public void onClick(DialogInterface dialog,int id) 
                 { 
                  if(userInput.getText()+"" != "") 
                  { 
                   Intent i = new Intent(MainActivity.this,AskForTextFile.class); 
                   i.putExtra("userInput",userInput.getText()+""); 
                   startActivity(i); 
                  } 
                  else 
                  { 
                   Toast.makeText(context, "Please enter backup name to go further.", Toast.LENGTH_LONG).show(); 
                  } 

                 } 
                } 
             ); 

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

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

試試這個---

替換該行---

mInput = ((EditText) LayoutInflater.from(context).inflate(R.layout.dialog_view, null).findViewById(R.id.etxtDialog)).getText().toString(); 

With--

mInput = ((EditText) builder.findViewById(R.id.etxtDialog)); 
String input= mInput.getText().toString();