更新 Recyclerview:notifyDataSetChanged() 不适用于 SharedPreferences 中的 ArrayList

Update Recylerview : notifyDataSetChanged() doesn't work with a ArrayList from SharedPreference

我有两个按钮(添加联系人)(清除所有联系人),每次我填写有关联系人的信息(姓名,phone,图片)我使用 SharedPreference 保存它们,所以如果我关闭应用程序并再次重新打开它,应该会出现项目,但在我下面的代码中,每当我尝试添加或删除联系人时都没有任何反应我应该关闭应用程序并再次打开它以更新 RecylerView

MainActivity

        contactAdapter = new ContactAdapter(getApplicationContext(), getExistedContactList(), new onRecyclerViewClickListener() {
            @Override
            public void onClick(View view, Contact contact) {
                Toast.makeText(MainActivity.this, contact.getFullName(), Toast.LENGTH_SHORT).show();
            }
        });
        recyclerView.setAdapter(contactAdapter);

添加联系人

add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Contact contact = new Contact();
                contact.setFullName(fullName.getText().toString());
                contact.setPhoneNumber(phoneNumber.getText().toString());
                contact.setContactProfilePictureURI(contactPictureUri.toString());
                contacts.add(contact);
                addToDB(fullName.getText().toString(), phoneNumber.getText().toString(), contactPictureUri.toString()); /*Add to database*/
                recyclerView.setAdapter(contactAdapter);
                contactAdapter.updateContactList(); /* Refresh/Update UI */
                addContactDialog.dismiss(); /* dismiss Contact Dialog */
            }
        });

删除所有联系人

    private void removeAllContact() {
        contacts.clear();
        tinydb.clear();
        contactAdapter.notifyDataSetChanged();/* Update UI */
    }

使用保存数据SharedPreference

 void addToDB(String fullName, String number, String uri) {
        tinydb = new TinyDB(getApplicationContext());
        ArrayList<Contact> postObjects = tinydb.getListObject("CONTACT_KEY", Contact.class);
        ArrayList<Contact> arrayList = new ArrayList<>();
        for (Object objs : postObjects) {
            arrayList.add((Contact) objs);
        }
        Contact mContact = new Contact();
        mContact.setFullName(fullName);
        mContact.setPhoneNumber(number);
        mContact.setContactProfilePictureURI(uri);
        arrayList.add(mContact);
        tinydb.putListObject("CONTACT_KEY", arrayList);
    }

 private List<Contact> getExistedContactList() {
        tinydb = new TinyDB(getApplicationContext());
        ArrayList<Contact> arrayList;
        arrayList = tinydb.getListObject("CONTACT_KEY", Contact.class);
        if (arrayList.size() == 0)
            return contacts;
        else
            return arrayList;
    }

在 class 之上定义联系人列表:

ArrayList<Contact> contactList = new ArrayList<>();

现在将其发送到适配器并在onCreate中仅将适配器设置为Recyclerview一次。

contactList.clear();
contactList.addAll(getExistedContactList());
    contactAdapter = new ContactAdapter(getApplicationContext(), contactList, new onRecyclerViewClickListener() {
                @Override
                public void onClick(View view, Contact contact) {
                    Toast.makeText(MainActivity.this, contact.getFullName(), Toast.LENGTH_SHORT).show();
                }
        });
        recyclerView.setAdapter(contactAdapter);

现在点击添加按钮:

add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Contact contact = new Contact();
                contact.setFullName(fullName.getText().toString());
                contact.setPhoneNumber(phoneNumber.getText().toString());
                contact.setContactProfilePictureURI(contactPictureUri.toString());
                contactList.add(contact);
                addToDB(fullName.getText().toString(), phoneNumber.getText().toString(), contactPictureUri.toString()); /*Add to database*/
                contactAdapter.notifyDataSetChanged();
                addContactDialog.dismiss(); /* dismiss Contact Dialog */
            }
        });

类似地编写代码以从 Db 中清除联系人列表并更新 UI。