EditText.setText()无效&从EditText获取错误的值

时间:2013-10-13 17:16:44

标签: android view android-edittext settext

我是Android上的首发,嘲笑手机的联系人列表。现在我有一个联系人列表,如下图所示,当我按下联系人列表中的一项时,它会弹出一个有两个选项的对话框。如果我选择“添加到黑色”,另一个AlertDialog允许我将此号码放入黑名单。我想在这里想到的是自动读取我选择的项目的编号,将其显示在“数字”空白处,这不需要用户再次输入。但事实证明它没有用,仍然没有什么是空白的。显示添加黑色对话框的屏幕截图和代码如下所示。

enter image description here enter image description here enter image description here

final View view = getLayoutInflater().inflate(R.layout.add_person, null);
                            AlertDialog alertDialog = new AlertDialog.Builder(MyTabHost.this).setTitle("Add a Black Number")
                                    .setView(view).setPositiveButton("Add", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            EditText inputNumber = (EditText) view.findViewById(R.id.inputNumber);
                                            EditText inputRemark = (EditText) view.findViewById(R.id.inputRemark);
                                            inputNumber.setText(dataList.get(arg2).get("number"));
                                            String number = inputNumber.getText().toString();
                                            String remark = inputRemark.getText().toString();
                                            Map<String, String> map = new HashMap<String, String>();
                                            map.put("remark", remark);
                                            map.put("number", number);
                                            map.put("display", Utils.formatPhoneNumber(number));
                                            if (MyTabHost.blackList.get(0).containsValue("You don't have any black number")) {
                                                MyTabHost.blackList.removeAll(MyTabHost.blackList);
                                            }
                                            MyTabHost.blackList.add(map);
                                            int i = mySharedPreference.getBlackSize() + 1;
                                            mySharedPreference.saveBlack(remark, number, i);
                                            mySharedPreference.saveBlackSize(i);
                                            dialog.dismiss();
                                            new AlertDialog.Builder(MyTabHost.this)
                                                    .setMessage("Black number succesfully added")
                                                    .setPositiveButton("OK", null).show();
                                        }
                                    }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.dismiss();
                                        }
                                    }).create();
                            alertDialog.show();

其实我在想我是否使用了错误的观点。正如上面的代码所示,我使用final View view = getLayoutInflater().inflate(R.layout.add_person, null);来获取对话框的新视图,这里的add_person.xml是我的布局。

我想知道错误的观点的原因是奇怪的事情发生了:当我手动输入数字和评论时(比如我按下联系人“杰克”的号码:8871203459和“杰克”作为评论)并按下“添加”,同时空白中的东西突然变为其他一些数字(我在其他活动中得到的一些数字),如下所示,存储的黑色数据也是奇怪的数字。

enter image description here

这很奇怪,因为我写了getText()的代码并保存了它:

EditText inputNumber = (EditText) view.findViewById(R.id.inputNumber);
                                            EditText inputRemark = (EditText) view.findViewById(R.id.inputRemark);
                                            inputNumber.setText(dataList.get(arg2).get("number"));
                                            String number = inputNumber.getText().toString();
                                            String remark = inputRemark.getText().toString();
                                            Map<String, String> map = new HashMap<String, String>();
                                            map.put("remark", remark);
                                            map.put("number", number);
                                            map.put("display", Utils.formatPhoneNumber(number));

这是一个漫长而无聊的问题。感谢您的阅读和帮助...

3 个答案:

答案 0 :(得分:1)

刚刚将相关评论转移到答案中。

只有在单击对话框上的“添加”按钮后才会运行setText。单击

,将查找视图和setText移出对话框

答案 1 :(得分:0)

使用toString()方法将文本转换为字符串,然后将其放在适当的位置。我遇到了同样的问题并通过这种方法解决了。

答案 2 :(得分:0)

我在这篇文章中解决了我的第二个问题。通过查询错误的ArrayList,这是一个粗心的错误。这次奇数不存在。但是EditText仍然无法用我想要的东西显示角色。请尽可能帮助。

更新:我发现尽管EditView无法设置用户可见的值,但它确实获得了值 - 我已经测试过了。奇怪的是,无论我在两个空格中输入什么(应该显示值)并按“添加”按钮,应用程序将始终保存我尝试让它们显示的原始值。

具体做法是:

EditText inputNumber = (EditText) view.findViewById(R.id.inputNumber);
EditText inputRemark = (EditText) view.findViewById(R.id.inputRemark);
inputNumber.setText(contactList.get(arg2).get("number").toString());
inputRemark.setText(contactList.get(arg2).get("name").toString());
String number = inputNumber.getText().toString();
String remark = inputRemark.getText().toString();
Map<String, String> map = new HashMap<String, String>();
map.put("remark", remark);
map.put("number", number);

我的EditTexts可以获取contactList.get(arg2).get("number").toString()contactList.get(arg2).get("name").toString(),但只是不显示它们。除了我在EditTexts上输入的任何内容之外,它们将传递上面的两个值,而不是我新输入的值,尽管我已经指定了String number = inputNumber.getText().toString()String remark = inputRemark.getText().toString()

最后更新:问题解决了,它不是一个硬技术,而是一个编程逻辑错误。如果有人遇到同样的问题,请参考@ ElefantPhace在上方的答案。谢谢大家!