안드로이드 개발 질문/답변
(글 수 45,052)
ListView에 커서 아답터를 달아서 구현했는데
너무 느리네요
간단히 주소록을 Cursor로 받아와서 Listview에 뿌려줫습니다. 근데 스크롤자체가 너무 느립니다.
그리고 해당 Row에 ClickListner를 주니 스크롤 중간에 터치를 해도 정지가 안대네요;;
리스너 달아도 정지 되는 방법 아시는분 답변좀 부탁드립니다.
public class ContactCursorAdapter extends CursorAdapter {
public ContactCursorAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public void bindView(View arg0, Context arg1, Cursor arg2) {
View row = arg0;
Cursor cursor = arg2;
TextView TextView_Name = (TextView)row.findViewById(R.id.tv_name);
TextView TextView_Number = (TextView)row.findViewById(R.id.tv_number);
int nID = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String strName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String strNumber = "";
if(cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))==1){
Cursor cursorNum = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ "='" + nID + "'",
null, null);
cursorNum.moveToFirst();
strNumber = cursorNum.getString(cursorNum.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
TextView_Name.setText(strName);
TextView_Number.setText(strNumber);
// row.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
//
//
// }
// });
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View row=null;
LayoutInflater inflater=((Activity) context).getLayoutInflater();
row=inflater.inflate(R.layout.list_contact, null);
//row.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
return row;
}
}
2010.10.22 10:20:29
저도 이거 비슷한 문제를 격엇습니다.
저는 ExpandableListView를 사용했는데요
스크롤할때마다 얘가 계속 뷰를 생성하기 때문에 버벅이는 걸껍니다.
저는 안드로이드 java 소스중에 SimpleExpandableListActivity를 참조해서 어댑터를 만들었습니다.
님의 경우에는
getView(int position, View convertView, ViewGroup parent)
다음 메소드를 구현해서 인자로 넘어오는 convertView를 재사용하면 될겁니다..
저의 경우는 다음과 같이 했습니다.
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
View view;
if (convertView == null) {
view = newGroupView(isExpanded, parent);
} else {
view = convertView;
}
TextView textView = (TextView)view.findViewById(R.id.text1);
textView.setText(mGroupData[groupPosition]);
return view;
}



