从功能更新时,ListView不显示项目

时间:2014-08-09 22:09:33

标签: java android listview

我正在使用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 ();

         }

不显示列表视图中的项目。 知道为什么吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

尝试

list.addAll(getAllsoldiers(choosengroup,db));

而不是

list=getAllsoldiers(choosengroup,db);

我的想法是作业:

list=getAllsoldiers(choosengroup,db);

将列表中保存的引用值从原始列表更改为新引用,并且适配器仍在使用对原始列表的引用。

即,当您创建适配器时,您将引用的值传递给原始列表 当你完成赋值时,你刚刚更改了列表中存储的引用值,但是适配器仍然保持指向原始列表的指针

使用addAll()会将项添加到原始列表中,该列表仍然被适配器引用。