无法从 alertDialog 中的两个 editText 字段更新我的字符串和双参数 - android studio
Posted
技术标签:
【中文标题】无法从 alertDialog 中的两个 editText 字段更新我的字符串和双参数 - android studio【英文标题】:cannot update my string and double arguemnts from two editText field in alertDialog - android studio 【发布时间】:2016-10-08 08:45:08 【问题描述】:我的程序是计算人员的平均数并且程序动态工作(名称的数量根据用户而变化)所以我想让用户通过创建一个AlertDialog
框来添加他想要的人,问题是:
我试图从AlertDialog
中获取姓名和年龄,但不幸的是我的私有变量没有更新...感谢帮助。
private String name; // Initialized later in the program to ""
private Double age; // also initilized to 0
.
.
.
.
dmAvarage = new AlertDialog.Builder(this);
dmAvarage.setTitle("add");
dmAvarage.setMessage("please enter name and age" + "\n");
TextView lblName = new TextView(this);
TextView lblPoints = new TextView(this);
lblName.setText("name:");
lblPoints.setText("age:");
final EditText txtName = new EditText(this);
final EditText txtPoints = new EditText(this);
LinearLayout layout = new LinearLayout(getApplicationContext());
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(lblName);
layout.addView(txtName);
layout.addView(lblPoints);
layout.addView(txtPoints);
dmAvarage.setView(layout);
dmAvarage.setPositiveButton("add", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialogInterface, int i)
name = txtName.getText().toString();
String str = txtPoints.getText().toString();
if (!number(str)) //function to check if string is number
Toast.makeText(getApplicationContext(), "not number, Toast.LENGTH_LONG).show();
return;
age = Double.parseDouble(str);
);
【问题讨论】:
如果下面回答的帖子不适合您。请提供更完整的代码供他们检查。 【参考方案1】:你能试试下面的 onClick() 实现吗:在代码中 onClick() 实现基本上是在匿名内部类中,所以我认为这就是为什么你在那里更新的值没有反映在外部类中的原因,因为更新是在其他类(内部类)的范围内。请尝试以下代码,这里我将 onClick() 中编写的代码提取到当前 Outer 类范围内的新方法中。请尝试一次,它可能会工作。如果有任何故障请告诉我,我会更多地调试它以找出确切的根本原因或解决方案。
dmAvarage.setPositiveButton("add", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialogInterface, int i)
initializeNameAndAge();
);
// This method is in Main(Outer) class.
private void initializeNameAndAge()
name = txtName.getText().toString();
String str = txtPoints.getText().toString();
if (!number(str)) //function to check if string is number
Toast.makeText(getApplicationContext(), "not number, Toast.LENGTH_LONG).show();
return;
age = Double.parseDouble(str);
【讨论】:
感谢您的提示...我检查了您的解决方案,但它给了我一个编译错误,因为该函数无法识别我的 EditText 变量,所以我改进了该函数并让它获取我的两个 EditText 变量但不幸的是它并没有改变什么。【参考方案2】:看,
您已经在函数中获取了两个变量,因此两个变量的范围只是那个函数,现在您正在从同一个函数访问对话框,但是对话框有自己的范围,因此它不会访问您的变量,所以更好的是
将顶部的两个变量声明为全局变量,以便您可以访问它并在对话框中使用。
【讨论】:
是的..我认为这是问题,但在开始时我不会创建全局变量,我试图创建一个函数并通过它我将访问我的变量..就像你看到的它没有用,所以我尝试了您的解决方案并将其声明为全局但不幸的是它没有改变任何东西:( 你有没有得到任何日志> 我不这么认为... ...我如何检查它? 只需运行您的应用程序,当您输入姓名或年龄并单击“确定”时,请在 logcat 中查看,您将在那里看到很多日志,如果有任何问题,您可以找到 我只得到了这个:getSlotFromBufferLocked:未知缓冲区:0xaa971c30以上是关于无法从 alertDialog 中的两个 editText 字段更新我的字符串和双参数 - android studio的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 中的 AlertDialog 小部件无法使用 setState 功能
Setstate() 无法更新 AlertDialog 中的 suffixIcon ? - 颤振
Android开发 解决AlertDialog中的EditText无法调出输入法的问题
如何从 alertDialog.setView(R.layout.some_layout) 获取 EditText 的值