我正在使用recyclerview實施一項活動。我加載了手機中的所有聯繫人(姓名和電話號碼)。一切看起來都不錯,問題是當我在視圖中進行滾動時,當我回到同一聯繫人時,此聯繫人沒有正確的電話號碼。是唯一一個改變。姓名和聯繫電話顯示正確。Recyclerview在滾動視圖時更改contactsContract中phoneNumber的值
例如,一個聯繫人只設置了手機。初始化時看起來沒問題,但如果我滾動並回來,家庭和工作設置了另一個數字,並且此用戶只有設置移動電話
一些幫助將apreciate!
這是我在recyclerAdapter onBind方法:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
dataCursor.moveToPosition(position);
holder.mTextView.setText((dataCursor.getString(1)));
ContentResolver cr = context.getContentResolver();
String contactId = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Contacts._ID));
Long photoTest = dataCursor.getLong(dataCursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
if (dataCursor.moveToFirst()) {
Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
if (phones == null) {
phones.close();
} else {
while (phones.moveToNext()) {
try {
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{contactId}, null);
while (pCur.moveToNext()) {
int phoneType = pCur.getInt(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
String phoneNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if(phoneType == TYPE_MOBILE){
holder.mNumberMoBilePhone.setText(phoneNumber);
holder.mNumberMoBilePhone.setVisibility(View.VISIBLE);
holder.textMobilePhone.setVisibility(View.VISIBLE);
}else if(phoneType == TYPE_HOME){
holder.mNumberHomePhone.setText(phoneNumber);
holder.mNumberHomePhone.setVisibility(View.VISIBLE);
holder.textHomePhone.setVisibility(View.VISIBLE);
}else if(phoneType == TYPE_WORK){
holder.mNumberWorkPhone.setText(phoneNumber);
holder.mNumberWorkPhone.setVisibility(View.VISIBLE);
holder.textWorkPhone.setVisibility(View.VISIBLE);
}else{}
}
} catch (NullPointerException n) {
}
}
phones.close();
}
}
if (photoTest != null) {
ContactPhotoLoaderSdk5.instance().loadPhoto(holder.mContactPhoto, photoTest);
}
}
不知道是否必須與thit東西,但這是我的選擇:
String select = "((" + ContactsContract.Contacts.DISPLAY_NAME + " NOTNULL) AND (" + ContactsContract.Contacts.HAS_PHONE_NUMBER + " != 0))";
我建議您在設置適配器時從數據庫獲取所有數據。將這些數據放入一個列表中並使用適配器中的列表。這樣可以提高性能,使代碼更清晰,並且更容易發現錯誤。 – Robbe