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は別の関数を呼び出します(物事をきれいに保つために、アクティビティにはたくさんのボタンがあります)

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内でボタンレートを再宣言せずにこれを実行できる方法があるかどうか疑問に思いました。

上部でボタンをfinalとして宣言しようとしましたが、ダイアログの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 に答える