无法访问我的OnClickListener函数中的(最终)按钮

时间:2012-05-03 13:53:16

标签: java android

这个片段的最终目标是:

  1. 从按钮调用Dialog(接口)。
  2. 让最终用户选择一个选项(在5个选项的列表中)
  3. 将按钮文字更改为所选选项
  4. 目前我有这个:

    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); 
    }
    

    所以这里: setOnClickListener调用一个单独的函数(为了保持干净,Activity有很多按钮)

    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();
        }
    };
    

    虽然这样可以正常但我想知道是否有一种方法可以将其拉出而不用重新声明对话框内的按钮率onClick

    我已经尝试在顶部声明按钮为最终版,但是这不会让我调用Dialog的onClick中的按钮。

2 个答案:

答案 0 :(得分:1)

Java中的变量有一个范围。它始终可用于包含其声明的块(一对大括号{})内,以及此块包含的任何块中。但不是ouside。

因此,如果在方法中声明按钮,则无法在此方法之外访问该按钮。 您只能在drupappSetUploadLayout内访问该按钮。

如果您希望所有方法都可以访问它,那么直接将它放在类体中。这样的变量称为字段,所有方法都可以访问字段。

public class A {
  private Button b;

  public void foo() {
    b=null;
  }
}
所有方法都可以访问

b。

阅读更多关于java的基础知识,你应该考虑在开始使用android之前制作小型J2SDK程序。

答案 1 :(得分:0)

作为参数的View v指的是单击的按钮...因此您可以删除按钮的重新声明并使用

 ( (Button) v).setText(adapter.getItem(which)+"");