2015-08-28 127 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