PDA

View Full Version : علت تکرار شدن چند رکورد از این لیست ویو سفارشی



meysam jahedi
پنج شنبه 28 اسفند 1393, 14:14 عصر
سلام

لیست مخاطبین رو میخوام با یه لیست ویو نشون بدم ، آداپتر و دستورات رو میزارم . نمیدونم چرا فقط 6 تا رکورد از نام مخاطبینم تکرار میشه !

public class MyAdapter extends BaseAdapter {
Activity a;

String[] N;
String[] T;

public MyAdapter (Activity act,String[] name,String[]number ){
a=act;
this.N=name;
this.T=number;

}
@Override
public int getCount() {
// TODO Auto-generated method stub
return N.length;
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}


@Override
public View getView(final int pos, View convertView, ViewGroup arg2) {

View mylist;
LayoutInflater inflater = (LayoutInflater) a.getSystemService(Context.LAYOUT_INFLATER_SERVICE );
if (convertView == null) {
mylist = new View(a);

mylist = inflater.inflate(R.layout.alluser_row2, null);

TextView textView1 = (TextView) mylist.findViewById(R.id.tvname);
TextView textView2 = (TextView) mylist.findViewById(R.id.tvphone);

textView1.setText(N[pos]);
textView2.setText(T[pos]);

} else {
mylist = convertView;
}

return mylist;
}


}


---------------------------------------------------------------------------------------------------



public void fetchContacts() {

String phoneNumber = null;
String email = null;
Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;
String _ID = ContactsContract.Contacts._ID;
String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;
String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI ;
String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
Uri EmailCONTENT_URI = ContactsContract.CommonDataKinds.Email.CONTENT_URI ;
String EmailCONTACT_ID = ContactsContract.CommonDataKinds.Email.CONTACT_ID;
String DATA = ContactsContract.CommonDataKinds.Email.DATA;
ContentResolver contentResolver = getContentResolver();

Cursor cursor = contentResolver.query(CONTENT_URI, null, null, null, null);
NAME=new String[cursor.getCount()];
SHOMARE=new String[cursor.getCount()];
int i=0;

if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String contact_id = cursor.getString(cursor.getColumnIndex(_ID));
String name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAM E));
int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumn Index(HAS_PHONE_NUMBER)));
if (hasPhoneNumber > 0) {

Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null, Phone_CONTACT_ID + " = ?",
new String[] {contact_id}, null);
while (phoneCursor.moveToNext()) {
phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(N UMBER));

}
phoneCursor.close();
Cursor emailCursor = contentResolver.query(EmailCONTENT_URI, null, EmailCONTACT_ID + " = ?",
new String[] {contact_id}, null);
while (emailCursor.moveToNext()) {
email = emailCursor.getString(emailCursor.getColumnIndex(D ATA));
}
emailCursor.close();
}

NAME[i]=name;
SHOMARE[i]=phoneNumber;
i++;
}
}
MyAdapter adapt=new MyAdapter(contact.this, NAME,SHOMARE);
listView.setAdapter(adapt);
}

مهدی عباس پور
پنج شنبه 28 اسفند 1393, 14:51 عصر
سلام

اولین مشکلش :


LayoutInflater inflater = (LayoutInflater) a.getSystemService(Context.LAYOUT_INFLATER_SERVICE );
if (convertView == null) {


convertView = inflater.inflate(R.layout.alluser_row2, null);


}

TextView textView1 = (TextView) convertView.findViewById(R.id.tvname);
TextView textView2 = (TextView) convertView.findViewById(R.id.tvphone);

textView1.setText(N[pos]);
textView2.setText(T[pos]);





return convertView;

برای با لا بردن عملکرد باید حداقل از ViewHolder pattern هم استفاده کنی

meysam jahedi
پنج شنبه 28 اسفند 1393, 14:59 عصر
خب من سوالم اینه که چرا تکرار میشه چندتا رکورد

مهدی عباس پور
پنج شنبه 28 اسفند 1393, 23:58 عصر
وقتی این قسمت از کدتو که در زیر امده از if بیاری بیرون قاعدتا تکرار نباید داشته باشی

TextView textView1 = (TextView) convertView.findViewById(R.id.tvname); TextView textView2 = (TextView) convertView.findViewById(R.id.tvphone);

textView1.setText(N[pos]);
textView2.setText(T[pos]);

البته من کد fetchContacts() رو چک نکردم شاید اون ردیف تکرار بر می گردونه