Не обновляется recyclerview при удалении последней оставшейся записи и при удалении сразу всех записей

Есть recyclerview, в котором отображаются записи из таблицы базы данных. В адаптере реализовано два варианта удаления записей (удаление одной выделенной записи и удаление всех записей). Если в таблице больше одной записи, то при удалении любой из них recyclerview обновляется нормально, но если в таблице осталась только одна запись, то при ее удалении recyclerview не обновляется, т.е. удаленная запись не исчезает (чтобы она исчезла нужно закрыть и открыть activity с recyclerview). Также не происходит обновления recyclerview если производится удаление всех записей одновременно (после удаления, записи продолжают отображаться в recyclerview). Как обновлять recyclerview при удалении последней оставшейся записи или всех записей одновременно?

// Получить все записи адресной книги:
public class GetAddressBook extends AsyncTask<String, Void, String> {
    Context mContext;
    RecyclerView mRv;
    protected  void onPreExecute(){}
    protected String doInBackground(String... arg0) {
        try {
            URL url = new URL(ServerAPI.url_get_address_book);
            // Формируем JSON из значений введенных в поля ввода:
            JSONObject json = new JSONObject();
            // Получение полей ввода:
            json.put("uic", CurrentSettings.UserID);
            return netS.httpConn(json, url);
        }
        catch(Exception e){
            if(CurrentSettings.debugMsgVisualization)
                return new String("Exception: " + e.getMessage());
            else
                return new String("");
        }
    }
    GetAddressBook(Context ctx, RecyclerView rv){
            this.mContext= ctx;
            mRv = rv;
    }

@Override
protected void onPostExecute(String result) {
    // Создаем ArrayList:
    ArrayList<AddressBookData> data = new ArrayList<>();
    // Заполняем ArrayList данными:
    try {
        JSONArray jArray = new JSONArray(result);
        // Извлекаем данные из JSON и записываем их в ArrayList, как объект класса CreditorsItemData:
        for(int i=0;i<jArray.length();i++){
            JSONObject json_data = jArray.getJSONObject(i);
            AddressBookData addressBookData = new AddressBookData();
            addressBookData.address_book_id = json_data.getString("address_book_id");
            addressBookData.author_id = json_data.getString("author_id");
            addressBookData.user_code = json_data.getString("user_code");
            addressBookData.user_name = json_data.getString("user_name");
            addressBookData.create_datetime = json_data.getString("create_datetime");
            data.add(addressBookData);
        }

        // Получаем recyclerView, создаем экземпляр адаптера, создаем экземпляр LinearLyoutManager:
        RecyclerView recyclerView = mRv;
        RecyclerView.Adapter adapter = new AddressBookRecyclerViewAdapter(this.mContext, data, mRv);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this.mContext);

        // Связываем recyclerView с адаптером и layout-менеджером:
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(layoutManager);
    } catch (JSONException e) {
        if(CurrentSettings.debugMsgVisualization)
            Toast.makeText(this.mContext, e.toString(), Toast.LENGTH_LONG).show();
    }
}

}

Код адаптера (обратите внимание на последний метод onPostExecute):

public class AddressBookRecyclerViewAdapter extends RecyclerView.Adapter<AddressBookRecyclerViewAdapter.RecyclerViewHolder> {

String current_code, // UIC лица из текущей записи.
       current_name; // Имя лица из текущей записи.
int deletingRows = -1; // Количество удаляемых строк (1 - 1 строка, 0 - все строки).

private Context context;
private RecyclerView mRV;
private ArrayList<AddressBookData> arrayListAddressBook;
private ArrayList<AddressBookData> selectedItems = new ArrayList<AddressBookData>();
AddressBookData current_record; // Текущая, выбранная длинным кликом, запись.

// В конструкторе передаем данные из RecyclerView в адаптер:
public AddressBookRecyclerViewAdapter(Context context, ArrayList<AddressBookData> arrayListAddressBook, RecyclerView rv){
    this.context=context;
    this.arrayListAddressBook = arrayListAddressBook;
    this.mRV = rv;
}

@NonNull
@Override
public AddressBookRecyclerViewAdapter.RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.ac_address_book_dlg_item, parent, false);
    return new AddressBookRecyclerViewAdapter.RecyclerViewHolder(view);
}

@Override
public void onBindViewHolder(AddressBookRecyclerViewAdapter.RecyclerViewHolder holder, int position) {
    holder.update(arrayListAddressBook.get(position));
}

@Override
public int getItemCount() {
    return arrayListAddressBook.size();
}

class RecyclerViewHolder extends RecyclerView.ViewHolder {
    LinearLayout frameLayout;
    TextView tvAddressBookName, tvAddressBookUIC;

    RecyclerViewHolder(View itemView) {
        super(itemView);
        frameLayout = itemView.findViewById(R.id.addressBookItemLayout);
        frameLayout.setBackgroundColor(Color.RED);
        tvAddressBookName = itemView.findViewById(R.id.tvAddressBookName);
        tvAddressBookUIC = itemView.findViewById(R.id.tvAddressBookUIC);
    }

    void selectItem(AddressBookData item) {
        selectedItems.add(item);
        frameLayout.setBackgroundColor(Color.LTGRAY);
    }

    void update(final AddressBookData value) {
        tvAddressBookName.setText(value.getUser_name().toString());
        tvAddressBookUIC.setText(value.getUser_code().toString());

        if (selectedItems.contains(value)) {
            frameLayout.setBackgroundColor(Color.LTGRAY);
        } else {
            frameLayout.setBackgroundColor(Color.WHITE);
        }

        // Обработка длинных кликов:
        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                frameLayout.setBackgroundColor(ContextCompat.getColor(context, R.color.colorAccent));
                current_record = value;
                current_code = value.getUser_code();
                current_name = value.getUser_name();
                final PopupMenu popupMenu = new PopupMenu(context, frameLayout);
                popupMenu.inflate(R.menu.address_book_menu);
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {

                        switch (item.getItemId()) {
                            case R.id.addressBookDeleteRow: // Удаляем одну запись:
                                deletingRows = 1;
                                new DeleteAddressBookRow().execute();
                                break;
                            case R.id.addressBookDeleteAllRow: // Удаляем все записи:
                                deletingRows = 0;
                                new DeleteAddressBookRow().execute();
                                break;
                            default:
                                break;
                        }
                        return false;
                    }
                });
                popupMenu.show();

                return true;
            }
        });

        // Обработка коротких кликов:
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Получаем позицию (номер строки) на которой был сделан клик:
                int position = getAdapterPosition();
                <Какой-то код, копирующий данные в поля другой activity>
            }
        });
    }
}

public class DeleteAddressBookRow extends AsyncTask<String, Void, String> {
    int pos;
    protected  void onPreExecute(){}
    protected String doInBackground(String... arg0) {
        try {
            URL url = new URL(ServerAPI.url_delete_address_book_row);
            // Формируем JSON из значений введенных в поля ввода:
            JSONObject json = new JSONObject();
            // Получение полей ввода:
            json.put("author", CurrentSettings.UserID);
            json.put("uic", current_code);
            json.put("name", current_name);
            if(deletingRows == 0) { // Удаляем все строки:
                json.put("deletingRows", "0");
            } else if(deletingRows == 1) { // Удвляем одну строку:
                json.put("deletingRows", "1");
            }
            return netS.httpConn(json, url);
        }
        catch(Exception e){
            if(CurrentSettings.debugMsgVisualization)
                return new String("Exception: " + e.getMessage());
            else
                return new String("");
        }
    }

    @Override
    protected void onPostExecute(String result) {
       **ЗДЕСЬ ЕЩЕ РАЗ ВЫЗЫВАЕМ ПОЛУЧЕНИЕ ДАННЫХ ИЗ ТАБЛИЦЫ ДЛЯ ОБНОВЛЕНИЯ В recyclerview**
        new GetAddressBook(context, mRV).execute();
        notifyDataSetChanged();
    }
}

}


Ответы (0 шт):