Android - 无法从自定义对话框中的EditText获取值

12

我无法成功获取自定义对话框中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();
    }
}

我没有收到任何异常,但变量查询被设置为空字符串。 任何帮助都将是fantastic的。

1
你尝试过这样写吗?EditText inputTemp = (EditText) builder.findViewById(R.id.search_input_text); - ρяσѕρєя K
是的,Eclipse建议将构建器转换为Activity类型,但不幸的是这并没有解决问题。 - Alec Moore
3
иҜ·е°Ҷbuilder.setView(inflater.inflate(R.layout.city_dialog, null))жӣҙж”№дёәbuilder.setView(view)гҖӮж„ҸжҖқжҳҜдҪҝз”ЁviewжӣҝжҚўеҺҹжқҘзҡ„д»Јз Ғдёӯзҡ„inflater.inflate(R.layout.city_dialog, null)жқҘи®ҫзҪ®еҜ№иҜқжЎҶзҡ„и§ҶеӣҫгҖӮиҜ·жіЁж„ҸпјҢзҝ»иҜ‘з»“жһңдёҚиғҪеҢ…еҗ«и§ЈйҮҠжҲ–е…¶д»–еҶ…е®№гҖӮ - ρяσѕρєя K
重要的一点是,使用相同的视图来访问您为AlertDialog设置的UI元素。 - ρяσѕρєя K
无法从自定义AlertDialog的EditText获取字符串 - Rachel Gallen
4个回答

16

我曾试图做同样的事情,但出现了相同的错误。我不知道为什么。过去我已经使用过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发现。

4
请使用以下内容替代:

使用此内容代替:

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

0

不需要写那么多代码,只需更改

    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();

0
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();
                }


            }
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接