更新 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。
我有两个按钮(添加联系人)和(清除所有联系人),每次我填写有关联系人的信息(姓名,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。