这是一个非常愚蠢的问题,但几天前我开始用java for android编程,我不知道该怎么办....
当我按下按钮时,我想要一个AlertDialog。此AlertDialog需要2次编辑。当你按OK时,它必须加速计算并在新的AlertDialog中显示解决方案。
这就是我得到的:
public void btn_own(View view) {
int a, b, c;
final String s;
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Enter range");
final EditText inputa = new EditText(this);
final EditText inputb = new EditText(this);
alert.setView(inputa);
alert.setView(inputb);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
int aa, bb, cc , e ;
aa = new Integer(String.valueOf(inputa));
bb = new Integer(String.valueOf(inputb));
cc = bb - aa;
Random rand = new Random();
int d = rand.nextInt(cc);
e = d + bb;
Integer out = new Integer(e);
s = out.toString();
new AlertDialog.Builder(this)
.setMessage(s)
.show();
}
});
}
最后一个“这个”是错的。我收到消息:
Builder(android.content.Context) in Builder cannot be applied to (android.content.DialogInterface.OnClickListener)
但我不知道我能写什么而不是'这个'
另一个问题是,标记了'this'行中的's'。
Cannot assign a value to final variable 's'
编辑:
我的新代码:
public void btn_own(View view) {
int a, b, c; // a : untere Grenze , b : obere Grenze
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Enter range");
final EditText inputa = new EditText(this);
final EditText inputb = new EditText(this);
alert.setView(inputa);
alert.setView(inputb);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
int aa = 0;
int bb = 0;
int cc = 0;
int e = 0;
try {
aa = Integer.parseInt(inputa.getText().toString());
} catch (NumberFormatException f) {
System.out.println("not a number: " + inputa.getText().toString());
f.printStackTrace();
}
try {
bb = Integer.parseInt(inputb.getText().toString());
} catch (NumberFormatException g) {
System.out.println("not a number: " + inputb.getText().toString());
g.printStackTrace();
}
cc = bb - aa;
Random rand = new Random();
int d = rand.nextInt(cc);
e = d + bb;
Integer out = new Integer(e);
s = out.toString();
new AlertDialog.Builder(Decider.this)
.setMessage(s)
.show();
}
});
alert.show();
}
错误: 好吧现在它的工作原理如下:我可以输入一个数字,然后我得到另一个随机数。 但我怎么能让它像以下一样工作:我进入一个范围,我得到一个随机数? 为什么只查看一个编辑?
答案 0 :(得分:3)
尝试在您的活动中实现DialogInterface.OnClickListener(它更好,因为您不创建新对象,因此使用更少的资源并节省电池)
public class MyActivity extends Activity implements {
public void onClick(DialogInterface dialog, int whichButton) {
int aa, bb, cc, e;
aa = new Integer(String.valueOf(inputa));
bb = new Integer(String.valueOf(inputb));
cc = bb - aa;
Random rand = new Random();
int d = rand.nextInt(cc);
e = d + bb;
Integer out = new Integer(e);
s = out.toString();
new AlertDialog.Builder(this).setMessage(s).show();
}
}
然后用这个设置你的按钮:
alert.setPositiveButton("Ok", this);
答案 1 :(得分:2)
您不应将AlertDialogs嵌套在其他AlertDialogs中。
所以这个:
new AlertDialog.Builder(this)
.setMessage(s)
.show();
将使用错误的上下文,但您必须将活动作为上下文传递
尝试使用YourActivity.this
或view.getContext()
作为参数
更新关于您应该尝试的NumberFormatException
:
try {
aa = Integer.parseInt(inputa.getText().toString());
} catch (NumberFormatException e) {
System.out.println("not a number: " + inputa.getText().toString());
e.printStackTrace();
}
但是你需要确保你的editText只允许数字!!
答案 2 :(得分:2)
使用引用OnClickListener上下文的view.getContext()
代替this
来创建AlertDialog:
AlertDialog.Builder alert = new AlertDialog.Builder(view.getContext());
如果您想在“提醒”按钮上更改“{1}}上的值”,请点击第s
段中的final
,然后在s
方法之外声明。
答案 3 :(得分:0)
要从String转换int,请使用:
aa = Integer.parseInt(inputa.getText()));
使用try / catch环绕它以避免用户输入错误和异常