Android 游标适配器不同的布局
Android Cursor Adapter different layouts
我正在尝试编写具有不同布局(2 种布局)的 ListView CursorAdapter。
我覆盖了 newView
和 bindView
方法。在具有相同布局的页面中,它们可以正常工作,但在具有混合应用程序崩溃的页面中。
发生这种情况是因为 bindView
在必须接收 list_item_person
的时刻接收类型 list_item_depart
的视图。 (前 2 次膨胀 list_item_depart
一切正常,但 3 个元素是 list_item_person
并且应用程序崩溃。
我的代码:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view;
ViewHolder holder = new ViewHolder();
if (getItemViewType(cursor) == ContactsDatabaseHelper.TYPE_DEPARTMENT) {
view = mInflater.inflate(R.layout.list_item_depart, parent, false);
holder.tvTitle = (TextView) view.findViewById(R.id.tvTitle);
holder.ivFolder = (ImageView) view.findViewById(R.id.ivFolder);
} else {
view = mInflater.inflate(R.layout.list_item_person, parent, false);
holder.tvName = (TextView) view.findViewById(R.id.tvName);
holder.tvPost = (TextView) view.findViewById(R.id.tvPost);
}
view.setTag(holder);
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
if (getItemViewType(cursor) == ContactsDatabaseHelper.TYPE_DEPARTMENT) {
int id = cursor.getInt(cursor.getColumnIndex(ContactsDatabaseHelper.DEPART_ID));
// Department title
holder.tvTitle.setText(cursor.getString(cursor.getColumnIndex(ContactsDatabaseHelper.DEPART_NAME)));
// Folder icon
if (ch.getChildDepartsCountById(id) > 0) {
holder.ivFolder.setVisibility(View.VISIBLE);
} else {
holder.ivFolder.setVisibility(View.GONE);
}
} else {
// Worker name
holder.tvName.setText(cursor.getString(cursor.getColumnIndex(ContactsDatabaseHelper.EMPLOYEE_NAME)));
// Worker post
holder.tvPost.setText(cursor.getString(cursor.getColumnIndex(ContactsDatabaseHelper.EMPLOYEE_TITLE)));
}
}
请帮忙,对不起我的英语(thx Google 翻译)
我不完全明白为什么会这样,但是当我改变重写的方法时
getViewTypeCount()
从 return 2
到 return 3
它工作正常。
我正在尝试编写具有不同布局(2 种布局)的 ListView CursorAdapter。
我覆盖了 newView
和 bindView
方法。在具有相同布局的页面中,它们可以正常工作,但在具有混合应用程序崩溃的页面中。
发生这种情况是因为 bindView
在必须接收 list_item_person
的时刻接收类型 list_item_depart
的视图。 (前 2 次膨胀 list_item_depart
一切正常,但 3 个元素是 list_item_person
并且应用程序崩溃。
我的代码:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view;
ViewHolder holder = new ViewHolder();
if (getItemViewType(cursor) == ContactsDatabaseHelper.TYPE_DEPARTMENT) {
view = mInflater.inflate(R.layout.list_item_depart, parent, false);
holder.tvTitle = (TextView) view.findViewById(R.id.tvTitle);
holder.ivFolder = (ImageView) view.findViewById(R.id.ivFolder);
} else {
view = mInflater.inflate(R.layout.list_item_person, parent, false);
holder.tvName = (TextView) view.findViewById(R.id.tvName);
holder.tvPost = (TextView) view.findViewById(R.id.tvPost);
}
view.setTag(holder);
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
if (getItemViewType(cursor) == ContactsDatabaseHelper.TYPE_DEPARTMENT) {
int id = cursor.getInt(cursor.getColumnIndex(ContactsDatabaseHelper.DEPART_ID));
// Department title
holder.tvTitle.setText(cursor.getString(cursor.getColumnIndex(ContactsDatabaseHelper.DEPART_NAME)));
// Folder icon
if (ch.getChildDepartsCountById(id) > 0) {
holder.ivFolder.setVisibility(View.VISIBLE);
} else {
holder.ivFolder.setVisibility(View.GONE);
}
} else {
// Worker name
holder.tvName.setText(cursor.getString(cursor.getColumnIndex(ContactsDatabaseHelper.EMPLOYEE_NAME)));
// Worker post
holder.tvPost.setText(cursor.getString(cursor.getColumnIndex(ContactsDatabaseHelper.EMPLOYEE_TITLE)));
}
}
请帮忙,对不起我的英语(thx Google 翻译)
我不完全明白为什么会这样,但是当我改变重写的方法时
getViewTypeCount()
从 return 2
到 return 3
它工作正常。