0

我这个片段的最终目标是:

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

所以在这里: 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 内的按钮速率的情况下完成此操作

我已经尝试在顶部将按钮声明为最终按钮,但这不会让我在对话框的 onClick 中调用按钮。

4

2 回答 2

1

Java 中的变量有一个作用域。它始终在包含其声明的块(一对大括号 {} )内以及该块包含的任何块中可用。但不是在外面。

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

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

public class A {
  private Button b;

  public void foo() {
    b=null;
  }
}

b 可以通过所有方法访问。

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

于 2012-05-03T18:12:16.820 回答
0

作为参数的 View v 指的是被点击的按钮......所以你可以删除按钮的重新声明并使用

 ( (Button) v).setText(adapter.getItem(which)+"");
于 2012-05-03T13:57:43.737 回答