このスニペットの最終的な目標は次のとおりです。
- ボタンからDialog(Interface)を呼び出します。
- エンドユーザーにオプションを選択させます(5つのオプションのリストから)
- ボタンのテキストを選択したオプションに変更します
現在私はこれを持っています:
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でボタンを呼び出すことはできません。