adapter.notifyDataSetChanged() не работает
У меня есть 2 активити, где в первой RecycleView показывает данные из базы данных, а во второй я добавляю новые данные в базу данных. Проблема в том, что новые данные не показываются в первой активити(только если я заново включу приложение). notifyDataSetChanged() не помогает.
Main java:
public class MainActivity extends AppCompatActivity implements Adapter.OnAdapterListener {
DatabaseHandler databaseHandler;
RecyclerView recyclerView;
LinearLayoutManager layoutManager;
static Adapter adapter;
static List<HabitInfo> habitInfoList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
databaseHandler = new DatabaseHandler(this);
habitInfoList = databaseHandler.getAllHabits();
initRecycleView();
}
public void initRecycleView() {
recyclerView = findViewById(R.id.recycleViewMain);
layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(RecyclerView.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
adapter = new Adapter(habitInfoList, this);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
вторая активити:
public class CreateHabit extends AppCompatActivity {
DatabaseHandler db;
int id;
Adapter.OnAdapterListener onAdapterListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_habit);
db = new DatabaseHandler(this);
TextView saveBtn = (TextView) findViewById(R.id.save_txt);
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// DATABASE Inserting Habits
db.addHabit(new HabitInfo("name", "desc"));
MainActivity.adapter.notifyDataSetChanged();
finish();
}
});
}
}
Также была попытка вместо MainActivity.adapter.notifyDataSetChanged(); писать:
MainActivity.habitInfoList.clear();
MainActivity.habitInfoList=db.getAllHabits();
MainActivity.adapter=new Adapter(MainActivity.habitInfoList, onAdapterListener );
MainActivity.adapter.notifyDataSetChanged();
Ответы (1 шт):
Ваше приложение вполне может упасть, когда Вы из 2-ой активити обращаетесь к первой. Не надо так делать. По существу вопроса - нужно менять архитектуру. Я бы посоветовал посмотреть в сторону ViewModel. Но если Вы только начинаете знакомство с андроидом, то чтобы добиться работоспособности приложения просто вынесите
habitInfoList = databaseHandler.getAllHabits();
initRecycleView();
в onResume(). Тогда MainActivity.adapter.notifyDataSetChanged(); из второй активити можно (и нужно) убрать.
Предупреждаю сразу, воизбежание кидания тапков - да, это далеко не лучший выход. Но работать будет (пусть и за счет времени ожидания юзера).