我正在Android Studio中开发Android应用程序,我怀疑下面哪种方法更好地将信息传递给异步方法,例如HTTP请求。我以警报对话框为例:
第一种方法:将参数声明为final:
final String par1 = "Test";
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
//Yes button clicked
doSomething(par1);
break;
case DialogInterface.BUTTON_NEGATIVE:
//No button clicked
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.getCurrentInstance().getApplicationContext()
);
builder.setMessage("confirm the operation?")
.setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
第二种方法:传递给监听器构造函数:
MyOnClickListener dialogClickListener = new MyOnClickListener("test") {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
//Yes button clicked
doSomething(this.getParameterValue());
break;
case DialogInterface.BUTTON_NEGATIVE:
//No button clicked
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.getCurrentInstance().getApplicationContext()
);
builder.setMessage("confirm the operation?")
.setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
我对第一种方法有一定的担心,因为它是一种全局变量。
答案 0 :(得分:1)
你的第一种方法很好。这不是一个全局变量,这是一个在闭包中捕获的局部变量。从技术上讲,这种方式或多或少与将变量传入侦听器的构造函数,将其存储在那里然后在方法中使用的方式相同。不同之处在于编译器会为您完成所有这些操作,您可以编写更少的代码。