내 사용자 정의 CursorAdapter입니다 :ViewHolder 패턴이 맞춤 CursorAdapter에 올바르게 구현 되었습니까? 여기
public class TasksAdapter extends CursorAdapter implements Filterable {
private final Context context;
public TasksAdapter(Context context, Cursor c) {
super(context, c);
this.context = context;
}
/**
* @see android.widget.CursorAdapter#newView(android.content.Context, android.database.Cursor, android.view.ViewGroup)
*/
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(android.R.layout.simple_list_item_checked, parent, false);
ViewHolder holder = new ViewHolder();
holder.textview = (CheckedTextView)v.findViewById(android.R.id.text1);
v.setTag(holder);
return v;
}
/**
* @see android.widget.CursorAdapter#bindView(android.view.View, android.content.Context, android.database.Cursor)
*/
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder)view.getTag();
int titleCol = cursor.getColumnIndexOrThrow(Tasks.TITLE);
int completedCol = cursor.getColumnIndexOrThrow(Tasks.COMPLETED);
String title = cursor.getString(titleCol);
boolean completed = Util.intToBool(cursor.getInt(completedCol));
holder.textview.setText(title);
holder.textview.setChecked(completed);
}
/**
* @see android.widget.CursorAdapter#runQueryOnBackgroundThread(java.lang.CharSequence)
*/
@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
StringBuffer buffer = null;
String[] args = null;
if (constraint != null) {
buffer = new StringBuffer();
buffer.append("UPPER (");
buffer.append(Tasks.TITLE);
buffer.append(") GLOB ?");
args = new String[] { "*" + constraint.toString().toUpperCase() + "*" };
}
Cursor c = context.getContentResolver().query(Tasks.CONTENT_URI,
null, (buffer == null ? null : buffer.toString()), args,
Tasks.DEFAULT_SORT_ORDER);
c.moveToFirst();
return c;
}
/**
* @see android.widget.CursorAdapter#convertToString(android.database.Cursor)
*/
@Override
public CharSequence convertToString(Cursor cursor) {
final int titleCol = cursor.getColumnIndexOrThrow(Tasks.TITLE);
String title = cursor.getString(titleCol);
return title;
}
static class ViewHolder {
CheckedTextView textview;
}
}
가하는 ViewHolder 패턴의 제약으로 올 가을? 나는 이것이 getView
이없는 CursorAdapter 였기 때문에 확실하지 않았습니다. 문제 나 제안 사항이 있으면 알려주십시오.
그래서 내가 View.findViewById (INT)와 같은 고가의 통화를 할 수 있습니다 내 응용 프로그램이 지연되지 않습니다? –
'findViewById (int)'는 생각만큼 비싸지 않습니다. 참조가있는 경우에만 참조를 반환합니다. ViewHolder 기술은 다른 종류의 문제를 해결하기 위해 존재합니다 : 실제로 필요한 것보다 많은 뷰를 생성하지 마십시오 (따라서 과도한 뷰 팽창을 피할 수 있습니다. 이는 비쌉니다). – Cristian
@ 크리스티안, 고마워. 'newView'와'bindView'를 사용하여 클래스가'SimpleCursorAdapter'를 확장하도록했습니다. 아래 코드를 참조하십시오. –