我的代码在这里:
public static boolean showConfirmationDialog(Context context, String title, String dialogContent) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle(title);
builder.setMessage(dialogContent);
builder.setPositiveButton("Confirm", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// what to do ?
}
});
现在,我想在点击"确认"之后返回true。按钮。那么我该如何回归" true"来自内部类 - 方法的OnClickListener。
需要一些帮助,谢谢。
答案 0 :(得分:10)
在此实例中,您无法从内部类返回内容。在这种情况下,它没有多大意义。该程序应该在你的onClick函数内等待,直到它返回一些东西?这并不是听众的工作方式。如果返回“true”,你需要做的就是执行你计划执行的任何代码,并把它放在你的内部类中。
答案 1 :(得分:3)
OnClickListeners不返回值。在点击监听器触发时我不知道你需要做什么,我不能给你任何细节,但是
private boolean classBoolean = false;
public static boolean showConfirmationDialog(Context context, String title, String dialogContent) {
//local variables must be declared final to access in an inner anonymous class
final boolean localBoolean = false;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle(title);
builder.setMessage(dialogContent);
builder.setPositiveButton("Confirm", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// what to do ?
//you can't change a local var since to access it it needs to be final
//localBoolean = true; can't do this
//so you can change a class var
classBoolean = true;
//or you can also call some method to do something
someMethod();
}
});
答案 2 :(得分:2)
您需要在实例变量上设置返回值(不在方法中) - 但这可能会导致并发问题,或者使用“容器”对象。传入或使用“最终”方法变量,您可以在其上设置要返回的返回值。但是,我松散地使用术语“返回”,至少在您的示例中,此代码不会立即执行,因此您确实需要在内部类中进行您感兴趣的处理。
答案 3 :(得分:0)
onClick
范式不允许您返回值,而让您稍后响应“事件”,因此您必须重新考虑一下代码范式。
对于追随者,如果内部类“阻塞”(即不是这种情况),则可以使用AtomicReference返回值,例如:
AtomicReference<String> returnValue = new AtomicReference<>();
someMethod( new Runnable() { returnValue.set("my inner class value");} );
return returnValue.get();
(如果可能的话)更好的方法是修改someMethod,以便它可以将您的值自身返回(并在此实例中使用Runnable以外的值)。 GL!
答案 4 :(得分:0)
您可以按照以下简单步骤操作:
create a POJO class object inside method.
call setter method by setting return value and use it.
示例:
public void process(){
Contact contact=new Contact();
String selectCount="select * from firmId where id=? for update";
PreparedStatementCreatorFactory pscf = new
PreparedStatementCreatorFactory(selectCount,new int[] {Types.INTEGER});
pscf.setUpdatableResults(true);
pscf.setResultSetType(ResultSet.CONCUR_UPDATABLE);
RowCallbackHandler rch = new RowCallbackHandler() {
@Override
public void processRow(ResultSet resultSet) throws SQLException {
// Here You can set your value
contact.setContactId(incrementCount);
resultSet.updateLong("firmCount",incrementCount);
resultSet.updateRow();
return;
}
};
return contact.getId();
}