[英]Can't reach my (final) button inside my OnClickListener function
我的最终目标是:
目前我有这个:
public void onCreate(Bundle savedInstanceState) {
setLayoutState();
// rest of code omitted
}
然后setLayoutState()实例化按钮
public void setLayoutState() {
setContentView(R.layout.main);
Button rate = (Button) findViewById(R.id.ratebutton);
rate.setOnClickListener(onRatePress);
}
所以在这里:
private final View.OnClickListener onRatePress = new View.OnClickListener() {
public void onClick(View v) {
final ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
context, R.array.rates, android.R.layout.select_dialog_item );
adapter.setDropDownViewResource(android.R.layout.select_dialog_item);
new AlertDialog.Builder(context).setTitle("Rate this item!")
.setAdapter(adapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Common.makeToast(context,adapter.getItem(which) + "", 3000);
Button rate = (Button) findViewById(R.id.ratebutton);
rate.setText(adapter.getItem(which)+"");
// TODO: user specific action
dialog.dismiss();
}
}).create().show();
}
};
虽然这很好用,但我想知道是否有办法在不重新声明Dialog onClick内的Button速率的情况下实现这一目标
我已经尝试在顶部将按钮声明为final,但这不会让我在Dialog的onClick中调用该按钮。
Java中的变量具有作用域。 它始终在包含其声明的块(一对大括号{})内部以及此块包含的任何块中可用。 但不是欧塞德。
因此,如果在方法内部声明按钮,则无法在该方法外部访问它。 您只能在drupappSetUploadLayout内部访问按钮。
如果希望所有方法都可以访问它,则将其直接放在类主体中。 这样的变量称为字段,并且所有方法都可以访问字段。
public class A {
private Button b;
public void foo() {
b=null;
}
}
b可以用所有方法访问。
阅读有关Java基础的更多信息,您应该在开始使用android之前考虑制作小型J2SDK程序。
作为参数的View v引用被单击的按钮...,因此您可以删除按钮的重新声明并使用
( (Button) v).setText(adapter.getItem(which)+"");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.