您好我正在弹出对话框以收集用户的评论。然后根据那个返回一个值。 “rcomment”是一个全局变量。它返回null。这不起作用。我做错了什么?
public String getDoNotBoardDialog(final int groupposition)
{
final Dialog dia = new Dialog(this);
dia.requestWindowFeature(Window.FEATURE_NO_TITLE);
dia.setContentView(R.layout.donotboard);
final EditText donotedit = (EditText) dia.findViewById(R.id.donotboardcomment);
donotedit.setText("");
Button button1 = (Button) dia.findViewById(R.id.donotboardbutton);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
r = donotedit.getText().toString();
String boardingComment = getString(R.string.donotboard) + " " + r;
PostCommentForAC(groupposition, boardingComment);
Intent intent = new Intent(getBaseContext(), TestExList.class);
intent.putExtra("EmpID", empid);
startActivity(intent);
rcomment = "true";
dia.cancel();
}
});
Button button2 = (Button) dia.findViewById(R.id.boardbutton);
button2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
rcomment = "false";
dia.cancel();
}
});
dia.show();
return rcomment;
}
答案 0 :(得分:1)
getDoNotBoardDialog
将首先返回rcomment
为null。触发onClickListeners时,rcomment
只会更改为“true”或“false”。它们在getDoNotBoardDialog
运行时不会被触发,但在此之后,每当触发onClickListeners时都会触发它。
当rcomment
更改为“true”或“false”时,无论您想要发生什么,都应放在onClick
方法中。因此,如果您想要检查用户点击后rcomment
是什么,请在那里进行。
答案 1 :(得分:0)
在你的申请中
程序流向
return rcomment;
之后直接
dia.show();
请记住,在转到return语句之前,它不会等待按钮被点击!在显示对话框之后(单击按钮之前)直接返回语句
答案 2 :(得分:0)
尝试使用此string.equals(data)它应该找出字符串是否相同。因为rcomment是一个字符串。也像Soham所说的那样,只有点击它才会更新。
我建议将来你应该改为布尔rcomment。因为看起来你只是做了真或假状态。
答案 3 :(得分:0)
编辑:不要使用下面的代码。它会杀死你的应用程序(ANR)。
你必须等到才能归还。一个快速(但非常脏)的解决方案是添加一些等待/通知机制,如下所示:(写入盲目可能包含一些错误)。
public String getDoNotBoardDialog(final int groupposition) {
// some Object to wait on
final Object waitOnMe = new Object();
final Dialog dia = new Dialog(this);
dia.requestWindowFeature(Window.FEATURE_NO_TITLE);
dia.setContentView(R.layout.donotboard);
final EditText donotedit = (EditText) dia.findViewById(R.id.donotboardcomment);
donotedit.setText("");
Button button1 = (Button) dia.findViewById(R.id.donotboardbutton);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
r = donotedit.getText().toString();
String boardingComment = getString(R.string.donotboard) + " " + r;
PostCommentForAC(groupposition, boardingComment);
Intent intent = new Intent(getBaseContext(), TestExList.class);
intent.putExtra("EmpID", empid);
startActivity(intent);
rcomment = "true";
dia.cancel();
// stop waiting.
synchronized(waitOnMe) {
waitOnMe.notify();
}
}
});
Button button2 = (Button) dia.findViewById(R.id.boardbutton);
button2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
rcomment = "false";
dia.cancel();
// stop waiting.
synchronized(waitOnMe) {
waitOnMe.notify();
}
}
});
dia.show();
// this wait's until someone calls notify
synchronized (waitOnMe) {
try {
waitOnMe.wait();
} catch (InterruptedException e) {}
}
return rcomment;
}
但这有问题。您可能会错过notify(),因此永远不会停止等待(例如,当您通过“后退”按钮关闭对话框时)。一个更清洁,更安全的解决方案是使用一些回调机制(从每个onClick中调用程序中的某个方法)从对话框中获取值。