我正在使用Android Studio,我有一个带有列表的活动,当我在填充文本框并单击项目显示的按钮后将项目添加到列表中,但是当我尝试从SQL查询向列表中添加项目时列表不显示项目。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent d = getIntent();
setContentView(R.layout.activity_add_group);
String choosengroup = d.getStringExtra("chosen");
groupn = (EditText) findViewById(R.id.gname);
soldiern = (EditText) findViewById(R.id.soldiername);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
final Button savebutton = (Button) findViewById(R.id.savegroup);
final Button addbutton = (Button) findViewById(R.id.addsoldier);
final DatabaseHelper db;
db = new DatabaseHelper(getApplicationContext());
setListAdapter(adapter);
if(!choosengroup.equals("")){
groupn.setText(choosengroup);
list=getAllsoldiers(choosengroup,db);
// Log.d("list",list.toString());
onContentChanged ();
}
savebutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db.createGroup(new Groups(groupn.getText().toString())); //Creates a group in Groups table
// Creates a new table for the specific group
db.getWritableDatabase().execSQL(" CREATE TABLE `Group_"+groupn.getText().toString()+"` (`id` INTEGER PRIMARY KEY AUTOINCREMENT ,`name` TEXT,`ghours` INTEGER DEFAULT "+'"'+"0"+'"'+",`ahours`INTEGER DEFAULT "+'"'+"0"+'"'+", `khours` INTEGER DEFAULT "+'"'+"0"+'"'+");");
for (String name: list) {
// Log.d("names:",name.toString());
db.getWritableDatabase().execSQL("INSERT INTO `Group_"+groupn.getText().toString()+"` (name) VALUES('"+name+"');");
}
Intent act2 = new Intent(view.getContext(),ChooseGroup.class);
startActivity(act2);
}
});
addbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// soldier.add(new Soldiers(soldiern.getText().toString()));
list.add(soldiern.getText().toString());
soldiern.setText("");
//setListAdapter(adapter);
Log.d("list",list.toString());
onContentChanged ();
}
});
addbutton.setOnClickListener添加项目,它们显示在列表中。
但是这个:
if(!choosengroup.equals("")){
groupn.setText(choosengroup);
list=getAllsoldiers(choosengroup,db);
// Log.d("list",list.toString());
onContentChanged ();
}
不显示列表视图中的项目。 知道为什么吗?
提前致谢。
答案 0 :(得分:0)
尝试
list.addAll(getAllsoldiers(choosengroup,db));
而不是
list=getAllsoldiers(choosengroup,db);
我的想法是作业:
list=getAllsoldiers(choosengroup,db);
将列表中保存的引用值从原始列表更改为新引用,并且适配器仍在使用对原始列表的引用。
即,当您创建适配器时,您将引用的值传递给原始列表 当你完成赋值时,你刚刚更改了列表中存储的引用值,但是适配器仍然保持指向原始列表的指针
使用addAll()会将项添加到原始列表中,该列表仍然被适配器引用。