前提・実現したいこと
Android Studio でアプリ作成を勉強しています。
動的に追加した複数のボタンのうち一つをタップすると、別のアクティビティに遷移する画面を作っています。
どのボタンを押しても同じアクティビティを開くのですが、押されたボタンによって違う画像を表示したいと考えてます。
発生している問題・エラーメッセージ
ネット情報を参考にJavaのボタンを追加した際にsetOnClickListener()をセットする、というのを試してるのですが、onClick(View v) の引数vからgetIdでリソースid取得しても-1が返ってきてしまいます(どのボタンでも同じです)。
該当のソースコード
(上部省略)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group_member);
// ------------ // LinearLayoutのネスト構造作成 // ------------ // ベースとなる既存のLinearLayout(一番の大枠)を取得 LinearLayout baseLayout = (LinearLayout)findViewById(R.id.groupBaseLayout); // 1.垂直方向のレイアウト LinearLayout memberLayout = new LinearLayout(this); memberLayout.setOrientation(LinearLayout.VERTICAL); int mem = 0; int j = 0; while (mem < membercnt){ // 2.横方向のレイアウトセット LinearLayout columnLayout = new LinearLayout(this); columnLayout.setOrientation(LinearLayout.HORIZONTAL); columnLayout.setGravity(Gravity.CENTER_HORIZONTAL); // 3.メンバーのイメージボタンは横最大3つまで for (j = 0; j < 3; j ++) { if (mem >= membercnt) { // continue; } else { // ImageButtonを追加 ImageButton imgBtn = new ImageButton(this); LinearLayout.LayoutParams buttonLayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); buttonLayoutParams.height=250; buttonLayoutParams.width=250; imgBtn.setAdjustViewBounds(true); imgBtn.setLayoutParams(buttonLayoutParams); imgBtn.setBackground(drawable); // ★★★★★★★★動的ボタンにonClickイベントを付与したい★★★★ imgBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Log.d("debug","★★-->" + ((ImageButton)v).getId()); // ここでputExtraなどで次画面に押下したボタンの情報を渡したい } } ); // ★★★★★★★★ ここまで ★★★ columnLayout.addView(imgBtn); // 表示割合は1 // 画像は調整なし // セット mem = mem + 1; } } memberLayout.addView(columnLayout); } baseLayout.addView(memberLayout); setContentView(baseLayout); }
試したこと
上記ソースの★で囲んだ箇所のように、setOnClickListener()を設定してみました。
エラーにはなりませんがgetId()は-1が返ってきます。よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
【OS】Windows 10
【Android Studio】Ver 4.0.1
【言語】Java 1.8.0_261
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/28 00:53