繁体   English   中英

无法到达我的OnClickListener函数中的(最终)按钮

[英]Can't reach my (final) button inside my OnClickListener function

我的最终目标是:

  1. 从按钮调用Dialog(Interface)。
  2. 让最终用户选择一个选项(在5个选项的列表中)
  3. 将按钮文本更改为所选选项

目前我有这个:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM