2015-08-28 124 views
-2

對,我知道有很多類似的問題。我研究過關於這個的stackoverflow以及在互聯網上,但仍然難倒。從AlertDialog Builder中的EditText獲取值

此代碼位於一個片段中。

... 
private Context context = getActivity(); 

public void Dialog(){ 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 

    // Get the layout inflater 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 

    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    View mView = inflater.inflate(R.layout.dialog, null); 
    alertDialogBuilder.setView(mView); 

    EditText a = (EditText) mView.findViewById(R.id.a); 
    EditText b = (EditText) mView.findViewById(R.id.b); 
    EditText c = (EditText) mView.findViewById(R.id.c); 

    //a.setText("abc"); 
    //b.setText("xyz"); 
    //c.setText("123"); 

    strA = a.getText().toString(); 
    strB = b.getText().toString(); 
    final String strC = c.getText().toString(); 
} 

這應該是越來越膨脹的佈局的視圖,並用它來訪問視圖中的元素的典型方法,但它不工作不管我試過了,我只是不能讓STRA,STRB和strC值使用getText()。toString()。

//a.setText("abc"); 
    //b.setText("xyz"); 
    //c.setText("123"); 

但是,如果我取消註釋上述3行,值會發送。我可以在strA,strB,strC中接收它們。這是爲什麼?我一點都不明白。

任何幫助非常感謝,謝謝!

+1

沒有任何操作從EditTexts獲取字符串。您應該在對話框中定義一個按鈕。比你可以通過button.onclicklistener得到的字符串... –

+0

是的謝謝你的建議。我完全忽略了這一點。事實上,我在這個代碼下面有一個onClickListener,我正在檢查值。業餘/累了的錯誤。謝謝! – lyk13

回答

0

您正試圖在初始化對話框時獲取值。你需要一個動作後得到的值,比如點擊一個按鈕

alertDialogBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface dialog, int whichButton) { 
    strA = a.getText().toString(); 
    strB = b.getText().toString(); 
    } 
}); 

看一看這個display textview in alert dialog

+0

非常感謝你!我完全忽略了我應該在onClick中獲取值。謝謝!我會在你舉例的時候標記你的回答是正確的。謝謝!我不能相信我犯了這樣的錯誤,累了就是一個藉口。 – lyk13

0

對我來說就像你在創建EditTexts時一樣檢查它的值。當然,由於用戶沒有時間輸入任何內容,因此每次該值都將爲空。我認爲你需要一個SubmitButton或類似的東西來檢查onClickListener中的EditTexts。儘管我承認我從來沒有將視角擴大到一個警告對話框。

+0

是的,實際上,我確實有一個onClickListener對話框上的確定按鈕,但我完全忽略了這一點,從而造成了業餘的錯誤。謝謝! – lyk13

0

當您嘗試設置值時,佈局尚未啓動,您需要先調用AlertDialog alertDialog = alertDialogBuilder.create();,然後alertDialog.show();或只需alertDialogBuilder.show(),然後才能編輯textView內容。

+0

是的,我在這段代碼後創建/顯示。我完全忘記了OK按鈕部分。我的錯!謝謝! – lyk13

+0

使用OK按鈕不是必須的,一旦使用show方法顯示對話框,您可以獲取或設置對話框中任何視圖的值。 –

0

嘗試這樣的。 MyDialogue是您的活動名稱。

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MyDialogue.this); 

       // Get the layout inflater 
       LayoutInflater inflater = MyDialogue.this.getLayoutInflater(); 

       // Inflate and set the layout for the dialog 
       // Pass null as the parent view because its going in the dialog layout 
       View mView = inflater.inflate(R.layout.dialog, null); 
       alertDialogBuilder.setView(mView); 

       final EditText a = (EditText) mView.findViewById(R.id.a); 
       final EditText b = (EditText) mView.findViewById(R.id.b); 
       final EditText c = (EditText) mView.findViewById(R.id.c); 

       a.setText("abc"); 
       b.setText("xyz"); 
       c.setText("123"); 

       alertDialogBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
          final String strA = a.getText().toString(); 
          final String strB = b.getText().toString(); 
          final String strC = c.getText().toString(); 
          Log.e("tag", strA + " " + strB + " " + strC); 
         } 
        }); 
       alertDialogBuilder.show(); 
+0

謝謝你的例子!這確實是我錯過了,謝謝你,謝謝你! – lyk13

+0

沒問題。請接受答案。 – Tauqir