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();
Другие вопросы по тегам