0

我使用显示信息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;
    }
}
4

1 回答 1

1

尝试覆盖下一个方法: public int getViewTypeCount() 和 public int getItemViewType(int position)

于 2012-08-21T11:02:47.947 回答