我必须实现一个类的返回方法。所以结构就像
一样简单public boolean yesNo(String message){
//return something
}
这里的问题是有一个EditText对象和一个Button,我希望返回一个布尔值,具体取决于用户在EditText中输入的答案。所以当然我必须等待用户写完并在他完成时单击按钮。我已经尝试在方法中设置onClicklistener但是我无法将任何内容传递给外部方法。
我知道在android中一切都是异步的所以我不应该等待用户做某事但是在这种情况下我没有其他想法。另外,我实现的方法是Jsch库的UserInfo类。根据我的理解,这个UserInfo是为用户交互而设计的,所以我认为它会以某种方式管理"提示"用户通过调用yesNo方法然后"等待"供用户反应。有任何想法吗?如果有人向我解释我的逻辑中是否有错误,我也很高兴。我对使用AsynTask或runnables不太自信,但我认为它与此有关。
The only available documentation of UserInfo class
非常感谢!
编辑:到目前为止的代码:
public static class MyUserInfo implements UserInfo, UIKeyboardInteractive {
public Button goButton = (Button) MainActivity.contentView.findViewById(R.id.startSSH);
public EditText editText = (EditText) MainActivity.contentView.findViewById(R.id.commandSSH);
public boolean yesNo = false;
public boolean promptYesNo(String str) {
goButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
String answer = editText.getText().toString();
if(answer.equals("yes")){yesNo = true;}
else {yesNo = false;}
}
});
return yesNo;
}
}
答案 0 :(得分:1)
我已经尝试在方法中设置onClicklistener但是 那么我就无法将任何东西传递给外部方法。
你想传递给外部方法的是什么?您可以创建类变量以使其在整个类中可用。
promptYesNo方法:
public void promptYesNo(String s) {
if(s.equals("Yes") //do something
else if(s.equals("No") //do something
}
以这种方式更改您的代码:
public static class MyUserInfo implements UserInfo, UIKeyboardInteractive {
public Button goButton = (Button) MainActivity.contentView.findViewById(R.id.startSSH);
public EditText editText = (EditText) MainActivity.contentView.findViewById(R.id.commandSSH);
goButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if (prompt) {
promptYesNo(editText.getText().toString());
}
}
});
}
答案 1 :(得分:1)
初始化屏幕时,在OnClickListener
上放置Button
,例如onCreate
生命周期方法。在听众的onClick
方法中,您可以使用yesNo
内容调用EditText
方法。
在屏幕的onCreate
方法中尝试这种方式:
mButton = (Button)findViewById(R.id.my_button);
mEditText = (EditText) findViewById(R.id.my_edittext);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
yesNo(mEditText.getText().toString());
}
});