【问题标题】:Android - Can't get value from EditText inside Custom DialogAndroid - 无法从自定义对话框中的 EditText 获取价值
【发布时间】:2013-01-12 03:41:25
【问题描述】:

我未能成功从自定义对话框中的 EditText 对象获取输入。

 public class SetCityDialog extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LayoutInflater factory = LayoutInflater.from(MainActivity.this);
        final View view = factory.inflate(R.layout.city_dialog, null);


        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        // Get the layout inflater
        LayoutInflater inflater = getActivity().getLayoutInflater();
        builder.setView(inflater.inflate(R.layout.city_dialog, null))
                // Add action buttons
                .setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int id) {

                                //This is the input I can't get text from
                                EditText inputTemp = (EditText) view.findViewById(R.id.search_input_text);
                                //query is of the String type
                                query = inputTemp.getText().toString();
                                newQuery();
                                getJSON newData = new getJSON();
                                newData.execute("Test");
                            }
                        })
                .setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                SetCityDialog.this.getDialog().cancel();
                            }
                        });
        return builder.create();
    }
}

我没有遇到任何异常,但变量查询设置为空字符串。 任何帮助都会很棒。

【问题讨论】:

  • 你试过EditText inputTemp = (EditText) builder.findViewById(R.id.search_input_text);
  • 是的,Eclipse 说要将 builder 转换为 Activity 类型,但遗憾的是这并不能解决问题。
  • 然后将builder.setView(inflater.inflate(R.layout.city_dialog, null))更改为builder.setView(view)
  • 重点是使用相同的视图来访问您为 AlertDialog 设置的 UI 元素
  • @ρяσѕρєяK 谢谢。成功了。

标签: java android xml dialog android-edittext


【解决方案1】:

改用这个:

View myLayout = nflater.inflate(R.layout.city_dialog, null);
EditText myEditText = (EditText) myLayout.findViewById(R.id.myEditText);
String valueOfEditText = myEditText.getText().toString();

【讨论】:

    【解决方案2】:

    我试图做同样的事情,但我得到了同样的错误。我不知道为什么。我过去已经使用过 AlertDialog.Builder 并且没有遇到任何问题。但在您的情况下更改此代码:

    public void onClick(DialogInterface dialog,
                                    int id) {
    
                                //This is the input I can't get text from
                                EditText inputTemp = (EditText) view.findViewById(R.id.search_input_text);
                                //query is of the String type
                                query = inputTemp.getText().toString();
                                newQuery();
                                getJSON newData = new getJSON();
                                newData.execute("Test");
                            }
    

    通过这个:

    public void onClick(DialogInterface dialog,
                                    int id) {
                                Dialog f = (Dialog) dialog;
                                //This is the input I can't get text from
                                EditText inputTemp = (EditText) f.findViewById(R.id.search_input_text);
                                query = inputTemp.getText().toString();
                               ...
                            }
    

    这个解决方案对我有用,对你来说似乎也一样。 发现于stackoverflow

    【讨论】:

      【解决方案3】:

      无需编写那么多代码。换个方式

          builder.setView(inflater.inflate(R.layout.city_dialog, null))
      

          builder.setView(view)
      

      并使用 **view.findView.....

      访问 EditText 的文本
          EditText inputTemp = (EditText) view.findViewById(R.id.search_input_text);
          String xyz = inputTemp.getText().toString();
      

      【讨论】:

        【解决方案4】:
        This is worked for me: 
        
        // if button is clicked, close the custom dialog
                dialogButton.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
        
                        try {
        
                            Dialog inDialog = (Dialog) dialog;                    
        
                            EditText emailAddress = (EditText) inDialog.findViewById(R.id.emailAddress);
                            email = emailAddress.getText().toString();
        
                            if(email.length() == 0) {
        
                                objPublicDelegate.showToast("Please fill Email Address.");
        
                            }else{
        
                                objLoadingDialog.show("Please wait...");
        
                                // Call a network thread Async task 
                                mNetworkMaster.runForgetAsync(email);
        
                            }
        
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
        
        
                    }
                });
        

        【讨论】:

          猜你喜欢
          • 2011-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多