【发布时间】:2014-02-25 17:53:10
【问题描述】:
我正在尝试使用 CursorAdapter 在我的 ListView 上实现一种交替行效果,也就是说,某些带有数字数据的行我想使用 blue.xml 进行布局,而对于文本行我想使用 red.xml 进行布局。我从 Sqlite 获取数据,所以我认为使用 CursorAdapter 可能会更好,尽管我想知道 CursorAdapter 是否具有显着优化的实现,因为与使用 BaseAdapter 相比,它使用来自查询的游标。所以我正在寻找一些帮助来获得不同类型的行的这种交替行效果:例如。
Text - red_row
Text - red_row
Numbers - blue_row
Text - red_row
Numbers - blue_row
Numers - blue_row
Text - red_row
@Override
public View newView( Context context, Cursor cursor, ViewGroup parent ) {
View retView;
Holder holder = new Holder();
LayoutInflater inflater = LayoutInflater.from( context );
if(cursor.getString( cursor.getColumnIndex( "from" ) ).equals( myId )){
retView = inflater.inflate( R.layout.row_red, parent, false);
holder.message = (TextView) retView.findViewById(R.id.msg1);
holder.time = (TextView) retView.findViewById(R.id.msg2);
holder.viewType = 1;
}else{
retView = inflater.inflate( R.layout.row_blue, parent, false);
holder.message = (TextView) retView.findViewById(R.id.txt1);
holder.time = (TextView) retView.findViewById(R.id.txt1);
holder.viewType = 2;
}
retView.setTag( holder );
return retView;
}
@Override
public void bindView( View view, Context context, Cursor cursor ) {
Holder holder = (Holder)view.getTag();
String message = cursor.getString( cursor.getColumnIndex( "text" ) );
String time = cursor.getString( cursor.getColumnIndex( "time" ) );
holder.message.setText( message );
holder.time.setText( time );
}
static class Holder{
TextView message;
TextView time;
int viewType;
}
我尝试了上面的代码,它确实适用于所有可见行,但是一旦必须滚动数据,所有新填充的行都显示错误的布局,我检查了 sqlite 中的数据和我想要的行 ID某个布局是正确的,不确定是什么原因导致这种情况,但我将其缩小到 newView 方法中的某些内容,或者查询速度太慢,导致错误布局膨胀的滚动速度。任何帮助表示赞赏。
【问题讨论】:
标签: android android-sqlite android-cursoradapter