Android Dialog返回String?

时间:2012-03-07 19:36:20

标签: android

您好我正在弹出对话框以收集用户的评论。然后根据那个返回一个值。 “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;
     }

4 个答案:

答案 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中调用程序中的某个方法)从对话框中获取值。