在我的Activity中,我查看了一个SQLite数据库(_id,name,number),并添加了与数据库中的行数一样多的按钮。对于每个按钮,我动态创建onClickListener,它将启动另一个活动,我需要从相应的数据库行传递数据。我的代码如下:
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启动的新Activity中,我使用传递的数据,如下所示:
Bundle extras = getIntent().getExtras();
name = extras.getString("name_bundle");
number = extras.getString("number_bundle");
所有按钮都是正确创建的,但我的问题是所有按钮都传递相同的信息。我的意图是,当单击第三个按钮时,将传递数据库中第三行的数据(代码中的第1列和第2列)(在新启动的Activity中,我将它们显示在TextView中)。但是会发生的是所有按钮都传递相同的数据!准确地说,来自数据库最后一行的数据。当我尝试向数据库添加另一行时,创建了一个额外的按钮,所有这些按钮再次显示了数据库中新创建的(因此最后一行)行的相同数据。我怀疑我的代码中的dum错误或完全不好的方法。有任何想法吗?谢谢!
答案 0 :(得分:-1)
在新的活动中使用removeExtra()
Bundle extras = getIntent().getExtras();
name = extras.getString("name_bundle");
number = extras.getString("number_bundle");
getIntent().removeExtra("name_bundle");
getIntent().removeExtra("number_bundle");
当你开始活动时,旧的额外内容被 替换为new。