我使用显示信息Listview
。但是,我有两种类型的布局文件取决于information_type。
如果 information_type 是1
,我将使用一个布局文件。如果 information_type 是2
,我将使用另一个布局文件。ListView
加载时会自动跳到底部。
例如,一开始,我有 40 个列表项。ListView
加载后,对于底部的 4-5 项,它使用正确的布局文件显示。
但是,当我滚动ListView
上部然后向下滚动时,底部的 4-5 个项目会更改它们的布局文件。
每次我上下滚动时,列表项(布局文件)通常可能会发生变化。
这是我的代码。
public class CustomCursorAdapter extends SimpleCursorAdapter{
private int layout;
public CustomCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
this.layout = layout;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent){
ViewHolder holder = new ViewHolder();
View v;
final LayoutInflater inflater = LayoutInflater.from(context);
int col_type = cursor.getColumnIndex(KEY_MESSAGE_TYPE);
String type = cursor.getString(col_type);
Log.d(TAG, "in newView: type is:" + type);
if (type.equalsIgnoreCase("1")){
Log.d(TAG, "in newView: receive message");
v = inflater.inflate(R.layout.sub_chat_view_in, parent, false);
holder.tv_title = (TextView)v.findViewById(R.id.titleIn);
holder.tv_message = (TextView)v.findViewById(R.id.messageIn);
holder.tv_time = (TextView)v.findViewById(R.id.timeIn);
}else{
Log.d(TAG, "in newView: send message");
v = inflater.inflate(R.layout.sub_chat_view_out, parent, false);
holder.tv_title = (TextView)v.findViewById(R.id.titleOut);
holder.tv_message = (TextView)v.findViewById(R.id.messageOut);
holder.tv_time = (TextView)v.findViewById(R.id.timeOut);
}
v.setTag(holder);
return v;
}
@Override
public void bindView(View v, Context context, Cursor c){
ViewHolder holder = (ViewHolder) v.getTag();
int col_owner = c.getColumnIndex(KEY_OWNER_NAME);
int col_target = c.getColumnIndex(KEY_TARGET_NAME);
int col_type = c.getColumnIndex(KEY_MESSAGE_TYPE);
int col_message = c.getColumnIndex(KEY_MESSAGE_CONTENT);
int col_time = c.getColumnIndex(KEY_TIME);
String owner = c.getString(col_owner);
String target = c.getString(col_target);
String type = c.getString(col_type);
String message = c.getString(col_message);
String time = c.getString(col_time);
if(type.equalsIgnoreCase("1")){
holder.tv_title.setText("From " + target);
}else{
holder.tv_title.setText("To " + target);
}
holder.tv_message.setText(message);
holder.tv_time.setText(time);
}
class ViewHolder {
TextView tv_title;
TextView tv_message;
TextView tv_time;
}
}