Android Studio - новый элемент в списке не отображается - PullRequest
0 голосов
/ 30 декабря 2018

В моем приложении у меня есть 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 голосов
/ 30 декабря 2018

Делайте одно, когда добавляете списки в адаптер, оборачиваете его в метод и вызываете этот метод как в методе onCreate, так и в методе OnStart.Таким образом, в основном вы должны добавить список в адаптер два раза по методам OnCreate и OnStart.Поэтому, когда вы обновляете данные и возвращаетесь к исходному виду деятельности, он запускает метод OnStart и отображает обновленные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...