更新Recylerview:notifyDataSetChanged()不适用于SharedPreference

时间:2019-06-13 19:30:07

标签: android arraylist android-recyclerview sharedpreferences android-adapter

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

MainActivity

RecylerView

添加联系人

        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

1 个答案:

答案 0 :(得分:1)

在班级顶部定义联系人列表:

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

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

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 */
            }
        });

Similary编写代码,用于清除Db中的联系人列表并更新UI。