Android: динамически добавлять OnClickListeners для кнопок - PullRequest
0 голосов
/ 21 февраля 2012

В своей активности я просматриваю базу данных SQLite (_id, name, number) и добавляю столько кнопок, сколько у меня есть строк в базе данных. Для каждой кнопки я динамически создаю onClickListener, который запускает другое действие, в которое мне нужно передать данные из строки базы данных coresponding. Мой код выглядит следующим образом:

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

В новой Деятельности, запущенной с помощью ImageButton, я работаю с переданными данными, как это:

Bundle extras = getIntent().getExtras();
name = extras.getString("name_bundle");
number = extras.getString("number_bundle");

Все кнопки созданы правильно, но моя проблема в том, что все они передают одну и ту же информацию. Мое намерение состояло в том, чтобы при нажатии третьей кнопки данные (столбцы 1 и 2 в коде) из третьей строки в базе данных передавались (во вновь запущенном действии я отображаю их в TextView). Но происходит то, что все кнопки передают одни и те же данные! Данные из последней строки базы данных будут точными. Когда я попытался добавить еще одну строку в базу данных, была создана одна дополнительная кнопка, и все они снова отобразили те же данные из только что созданной (следовательно, последней) строки базы данных. Я подозреваю, что в моем коде либо ошибка, либо совершенно неверный подход. Есть идеи? Спасибо !!

1 Ответ

0 голосов
/ 21 февраля 2012

В вашей новой деятельности используйте removeExtra()

Bundle extras = getIntent().getExtras();
name = extras.getString("name_bundle");
number = extras.getString("number_bundle");
getIntent().removeExtra("name_bundle");
getIntent().removeExtra("number_bundle");

Когда вы начинаете занятие, старые дополнения не заменяются новыми.

...