notifyDataSetChanged() не работает с моим RecyclerView.Adapter, когда он вызывается из onActivityResult()
Когда onActivityResult()
вызывается после того, как пользователь возвращается к исходному действию, я обновляю данные для RecyclerView
и позвонить notifyDataSetChanged()
но onBindViewHolder()
не вызывается и RecyclerView
не обновляет.
Если я запускаю тот же код, чтобы обновить Recylerview из onClick()
вызвать RecyclerView
обновляется правильно. Это только когда код обновления вызывается из onActivityResult()
что RecylerView
не обновляет.
Я пытался обновить RecylerView
запустив метод обновления с помощью runOnUiThread()
метод, но это не решило проблему. Я также попробовал все соответствующие методы уведомления (т.е. notifyDataSetChanged()
и т. д.) RecyclerView.Adapter
но я просто сошлюсь на notifyDataSetChanged
для простоты.
Вот основное воспроизведение проблемы:
//This code is in the Adapter, it removes an item from the arrayList and updates the RecylerView.
protected void refreshData(int position){
arrayListData.remove(position);
notifyDataSetChanged ();
}
//This code is in the ViewHolder. When refreshData() is called via the onClick() here the **RecylerView does successfully update**
@Override
public void onClick(View v) {
if (shouldRefreshData == true) {
refreshData(getAdapterPosition());
} else {
Intent secondActivity = new Intent(context, SecondActivity.class);
((Activity)context).startActivityForResult(secondActivity, Adapter.REQUEST_CODE);
}
}
//I set the result code is in the Second Activity like this
setResult(Adapter.REQUEST_CODE, usefulIntent);
//This code is in the original activity, it successfully runs, and the refreshData() method is called and I can see the data has been removed via log statements in the refreshData() method but the onBindViewHolder() method is never called
@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (requestCode == Adapter.REQUEST_CODE) {
....
adapter.refreshData(positionRetrievedFromTheDataIntent);
}
}
Видя как refreshData()
метод правильно обновляет RecyclerView
когда он вызывается через onClick()
триггер, кажется, что этот метод настроен правильно. Я пытался добавить задержку к onActivityResult
который дал бы RecylervView
время загрузки любых данных перед запуском refreshData()
метод, но это не решило проблему.
Может кто-нибудь увидеть какие-либо проблемы в моем коде или сказать мне, как решить эту проблему?
Я просмотрел другие вопросы SO, но не смог найти подходящее решение этой проблемы.
заранее спасибо
1 ответ
Убедитесь, что вы назвали:
finish();
после setResult
:
setResult(Adapter.REQUEST_CODE, usefulIntent);
Для того, чтобы вызвать onActivityResult
,
Также если:
notifyDataSetChanged();
не работает рассмотреть возможность сброса
setAdapter();