Запись в БД из Recyclerview

194
08 декабря 2017, 04:13

Имеется RecyclerView, в котором есть поля. Как организовать считывание данных и запись в БД?

public class TableMain extends Activity {
    List<TableModel> tableModels = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_table_main);

        createObjectTable();
        RecyclerView recyclerView = findViewById(R.id.list);
        DataAdapter dataAdapter = new DataAdapter(this, tableModels);
        recyclerView.setAdapter(dataAdapter);

    }
    public void createObjectTable() {
        tableModels.add(new TableModel("", "", ""));
        tableModels.add(new TableModel("", "", ""));
    }
}

class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
    private LayoutInflater inflater;
    private List<TableModel> tableModels;
    public DataAdapter(Context context, List<TableModel> tableModels) {
        this.tableModels = tableModels;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.activity_table_model, parent, false);
        return new ViewHolder(view);
    }
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    }
    @Override
    public int getItemCount() {
        return tableModels.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder{
        EditText task, firstMark, secondMark;
        public ViewHolder(View itemView) {
           super(itemView);
           task = itemView.findViewById(R.id.task_EditText);
           firstMark = itemView.findViewById(R.id.first_mark_EditText);
           secondMark = itemView.findViewById(R.id.second_mark_EditText);
        }
   }
}
public class TableModel {
    private String task;
    private String firstMark;
    private String secondMark;
    public TableModel(String task, String firstMark, String secondMark) {
        this.task = task;
        this.firstMark = firstMark;
        this.secondMark = secondMark;
    }
    public String getTask() {
        return task;
    }
    public void setTask(String task) {
        this.task = task;
    }
    public String getFirstMark() {
        return firstMark;
    }
    public void setFirstMark(String firstMark) {
        this.firstMark = firstMark;
    }
    public String getSecondMark() {
        return secondMark;
    }
    public void setSecondMark(String secondMark) {
        this.secondMark = secondMark;
    }
}
Answer 1

Эммм... это такой обширный вопрос. Принято это делать так:

1) Нужен ContentProvider, над вашей БД - можно и без него, но это как бы не очень кошерно

2) Далее надо научиться асинхронно загружать из ContentProviderCursor, делается это посредством CursorLoader

3) Когда у вас появится Cursor уже можно применить RecyclerViewCursorAdapter - ну то есть адаптер, который автоматом будет на каждую запись БД отображать айтем в RecyclerView

4) Теперь в холдере у вас будет Cursor, который будет указывать на текущую запись, соответственно можно будет его апдейтить прямо из ViewHolder

Как то так.

Можно пропустить шаги 1, 2 и сразу получить Cursor из БД посредством SQLiteDatabase.query(), будет не так красиво и немного подтормаживать, но вполне работоспособно.

READ ALSO
Кодировка UTF-8, UTF-16 в Java

Кодировка UTF-8, UTF-16 в Java

Хочу вывести греческую букву U (https://unicode-tablecom/en/01AF/) - получаю знаки вопроса

228
SSLSocket подключение к серверу

SSLSocket подключение к серверу

Из своего Android-приложения подключаюсь к севреру через обычный SocketНо сервер может работать также с шифрованием

200
Хороший мануал для Spring (Boot + Jpa + Mvc + Web + Security) + Primefaces

Хороший мануал для Spring (Boot + Jpa + Mvc + Web + Security) + Primefaces

Да я искал, много искал и долго)

191
Как изменять view элементы из класса унаследованного AsyncTask&#39;ом

Как изменять view элементы из класса унаследованного AsyncTask'ом

Также попрошу проанализировать код и сказать что в нём можно было бы улучшитьСпасибо

255