Android Studio-列表中的新项目未显示

时间:2018-12-30 14:05:30

标签: java sql android-studio

在我的应用程序中,我有一个ListView,如果添加一些新项目,则ListView不会显示项目。如果我关闭应用程序并返回其中,则会显示这些项目。

因此,我的新项目将保存在数据库中,但是列表将不会同步。 我在youtube上遵循了一个教程,如果他尝试的话,它可以正常工作,但是在我的应用程序中却不能。我希望有人可以帮助我找到我的问题。

在我的newItem_Activity中,我有一个带有以下代码的添加按钮:

btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(todo.getName() == null){
                    Toast.makeText(ToDoCreateNew.this, "Please insert some value.", Toast.LENGTH_LONG).show();
                    return;
                }    
            ToDoDatabaseHelper.getInstance(ToDoCreateNew.this).createTodo(todo);
            finish();
            }
        });

我的数据库如下:

public ToDo createTodo(final ToDo todo) {
        SQLiteDatabase database = this.getWritableDatabase();

        ContentValues contentValues = new ContentValues();
        contentValues.put(NAME_COLUMN, todo.getName());
        contentValues.put(DUEDATE_COLUMN, todo.getDueDate() == null ? null : todo.getDueDate().getTimeInMillis() / 1000);
        contentValues.put(FAVORITE_COLUMN, todo.isFavorite() ? 1 : 0);
        contentValues.put(DESCRIPTION_COLUMN, todo.getDescription());
        contentValues.put(DUETIME_COLUMN, String.valueOf(todo.getDueTime() == null ? null : todo.getDueTime().getTime()));

        long newID = database.insert(TABLE_NAME, null, contentValues);
        database.close();
        return readToDo(newID);
    }

public List<ToDo> readAllToDos(){
    List<ToDo> todos = new ArrayList<>();
    SQLiteDatabase database = this.getReadableDatabase();

    Cursor c = database.rawQuery("SELECT * FROM " + TABLE_NAME, null);
    if (c.moveToFirst()){
        do {
            ToDo todo = readToDo(c.getLong(c.getColumnIndex(ID_COLUMN)));
            if (todo != null){
                todos.add(todo);
            }
        } while (c.moveToNext());

    }
    database.close();
    return todos;
}

并且此代码位于我与ListView关联的活动中:

List<ToDo> dataSource;
ToDoOverviewListAdapter adapter;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_to_do_overview);  

    lv = (ListView) findViewById(R.id.listToDo);
    dataSource = ToDoDatabaseHelper.getInstance(this).readAllToDos();

    adapter = new ToDoOverviewListAdapter(this, dataSource);
    lv.setAdapter(new ToDoOverviewListAdapter(this, dataSource));
}

// Go to Activity to Add new Item - Add Button is in newItem_Activity
public void createToDo(){
    startActivity(new Intent(ToDoOverview.this, ToDoCreateNew.class));
    refreshListView();
}   

private void refreshListView(){
    dataSource.clear();
    dataSource.addAll(ToDoDatabaseHelper.getInstance(this).readAllToDos());
    adapter.notifyDataSetChanged();
}

1 个答案:

答案 0 :(得分:0)

在适配器中添加列表时做一件事,将其包装在一个方法中,然后在onCreate和OnStart Method中都调用该方法。因此,基本上,您必须两次在适配器中添加列表OnOnCreate方法和OnStart方法。因此,当您更新数据并返回到原始活动时,它将触发OnStart方法,并显示更新后的数据。