Проблема с сохранением данных в базу Room
На главной активности находится RecyclerView, где будут отображаться все данные из базы. При нажатии на кнопку водится дата с помощью DatePickerDialog, затем переход на следующую активность, где вводятся два значения: координаты x и y. В меню сверху есть кнопки "сохранить" и "назад". У введенных значений автоматически сохраняется та дата, которую пользователь ввел вначале. При нажатии на кнопку "сохранить" мне хотелось бы, чтобы эти три значения сохранялись и выводились в RecyclerView. И сколько раз пользователь нажмет на "сохранить", чтобы столько элементов добавились в базу. А при нажатии на кнопку "назад", пользователь просто переходит на главную активность и дата обнуляется. Однако, в итоге сколько раз не нажимай на "сохранить", сохраняется только одно последнее значение. Подскажите, пожалуйста, как можно исправить?
Класс MainActivity:
public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener{
public static final int ADD_NOTE_REQUEST = 1;
public static final String CURRENT_DATE =
"com.example.architectureexample.CURRENT_DATE";
private DataViewModel dataViewModel;
String currentDate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FloatingActionButton btn_add = findViewById(R.id.btn_add);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment datePicker = new DatePickerFragment();
datePicker.show(getSupportFragmentManager(), "DatePicker");
}
});
final DataAdapter adapter = new DataAdapter();
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
dataViewModel = new ViewModelProvider(this).get(DataViewModel.class);
dataViewModel.getAllData().observe(this, new Observer<List<Data>>() {
@Override
public void onChanged(List<Data> list) {
adapter.setData(list);
}
});
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
dataViewModel.delete(adapter.getDataAtPosition(viewHolder.getAdapterPosition()));
Toast.makeText(MainActivity.this, "Deleted successfully!", Toast.LENGTH_SHORT).show();
}
}).attachToRecyclerView(recyclerView);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ADD_NOTE_REQUEST && resultCode == RESULT_OK) {
String date = data.getStringExtra(AddDataActivity.EXTRA_DATE);
float xValue = data.getFloatExtra(AddDataActivity.EXTRA_X_VALUE, 1);
float yValue = data.getFloatExtra(AddDataActivity.EXTRA_Y_VALUE, 1);
Data newData = new Data(date, xValue, yValue);
dataViewModel.insert(newData);
Toast.makeText(this, "Saved successfully!", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(this, "Note wasn't saved", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
currentDate = DateFormat.getDateInstance(DateFormat.DEFAULT).format(c.getTime());
Intent intent = new Intent(MainActivity.this, AddDataActivity.class);
intent.putExtra(CURRENT_DATE, currentDate);
startActivityForResult(intent, ADD_NOTE_REQUEST);
}
}
Класс AddDataActivity:
public class AddDataActivity extends AppCompatActivity {
public static final String EXTRA_X_VALUE =
"com.example.architectureexample.EXTRA_X_VALUE";
public static final String EXTRA_DATE =
"com.example.architectureexample.EXTRA_DATE";
public static final String EXTRA_Y_VALUE =
"com.example.architectureexample.EXTRA_Y_VALUE";
private EditText et_xValue;
private EditText et_yValue;
private String currentDate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_data_acrivity);
et_xValue = findViewById(R.id.et_xValue);
et_yValue = findViewById(R.id.et_yValue);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close);
setTitle("Add data");
Intent data = getIntent();
currentDate = data.getStringExtra(MainActivity.CURRENT_DATE);
}
private void saveNote() {
if (et_xValue.getText().length() == 0 || et_yValue.getText().length() == 0 || currentDate == null) {
Toast.makeText(this, "You must put something in the text field!", Toast.LENGTH_SHORT).show();
return;
}
float xValue = Float.valueOf(et_xValue.getText().toString());
float yValue = Float.valueOf(et_yValue.getText().toString());
Intent intent = new Intent();
intent.putExtra(EXTRA_X_VALUE, xValue);
intent.putExtra(EXTRA_Y_VALUE, yValue);
intent.putExtra(EXTRA_DATE, currentDate);
setResult(RESULT_OK, intent);
et_xValue.setText("");
et_yValue.setText("");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.add_data_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.save_data:
saveNote();
return true;
case android.R.id.home:
Toast.makeText(getApplicationContext(), "Home button pressed", Toast.LENGTH_SHORT).show();
currentDate = null;
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}