私のアクティビティでは、SQLiteデータベース(_id、name、number)を調べて、データベースに行を持つボタンを追加します。各ボタンについて、私は対応するデータベース行からデータを渡す必要がある別のアクティビティを開始するonClickListenerを動的に作成します。私のコードは次のとおりです。Android:動的にボタンにOnClickListenersを追加
Bundle extras = getIntent().getExtras();
name = extras.getString("name_bundle");
number = extras.getString("number_bundle");
すべてのボタンが正しく作成されますが、私の問題は、すべてのことです。私はこのようなデータに渡さと協力のImageButtonによって開始された新しい活動に
db.open();
String name;
String number;
Cursor c = db.getAllContacts();
c.moveToFirst();
int count = db.getCount();
for (int i = 0; i < count; i++) {
ImageButton button = new ImageButton(this);
name = c.getString(1);
number = c.getString(2);
button.setOnClickListener(new onClickListener() {
public void onClick(View v) {
Intent intent = new Intent(This_class.this, Other_class.class);
intent.putExtra("name_bundle", name);
intent.putExtra("number_bundle", number);
startActivity(intent);
}
});
c.moveToNext();
}
db.close();
をそれらは同じ情報を渡す。私の意図は、3番目のボタンをクリックすると、データベースの3番目の行のデータ(コードの1番目と2番目の列)が渡されたことです(新規に開始されたアクティビティでは、それらをTextViewで表示します)。しかし、何が起こるかは、すべてのボタンが同じデータを渡すことです!データベースの最後の行からのデータを正確にします。もう1つの行をデータベースに追加しようとすると、1つの余分なボタンが作成され、それらのすべてが新しく作成された(したがって最後の)行から同じデータを再度表示しました。私は自分のコードに間違いがあるとか、完全に悪いと思っています。何か案は?ありがとう!!新しいアクティビティの使用において
onClickListener実装の前にインテントを作成してから、 'button.setTag(intent);を使用してください(すべてのボタンのOnClickListener実装) (ビューv){ startActivity((インテント)v.getTag()); } 'ボタンに設定しますbutton.setOnClickListener(listener);' – Selvin
とにかく...リストビューを再呼び出ししています – Selvin
... 'name'と' number'宣言を入れてみることもできます** IN ** for 'ループスコープ(スコープでは「{}」または「expireion」を意味します) – Selvin