android - 具有不同行布局的光标适配器

标签 android listview android-cursoradapter

我正在尝试创建一个自定义光标适配器,它将根据光标中的某些数据使用两种不同的布局。我一直在阅读有关“覆盖 getViewTypeCount() 和 getItemViewType()”以实现这一点的信息,但我似乎无法弄清楚如何实现这一点..

这是我的 bindView 和新 View 方法的代码:

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView tView = (TextView) view.findViewById(R.id.TextView1);
    tView.setText("The text");
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return mInflater.inflate(R.layout.item1, parent, false);
}

.

编辑: 现在我得到了这个工作,但我想根据光标中的一些数据选择要使用的行布局,我无法让它工作..有人有什么想法吗?

@Override
public int getItemViewType(int position) {
    return position % 2;
}

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    ViewHolder holder = (ViewHolder) view.getTag();
    holder.txtAddress
            .setText("blabla");
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    ViewHolder holder = new ViewHolder();
    View v = null;
    int type = cursor.getPosition() % 2;
    if(type == 0) {
        v = mInflater.inflate(R.layout.item, parent, false); 
    } else {
        v = mInflater.inflate(R.layout.item2, parent, false);
    }

    holder.txtAddress = (TextView) v.findViewById(R.id.tvName);

    v.setTag(holder);
    return v;
}

最佳答案

所以我终于搞定了。对于感兴趣的人,工作代码如下:

private int getItemViewType(Cursor cursor) {
    String type = cursor.getString(cursor.getColumnIndex("type"));
    if (type.equals("1")) {
        return 0;
    } else {
        return 1;
    }
}

@Override
public int getItemViewType(int position) {
    Cursor cursor = (Cursor) getItem(position);
    return getItemViewType(cursor);
}

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    ViewHolder holder = (ViewHolder) view.getTag();
    holder.textView
            .setText(cursor.getString(cursor.getColumnIndex("body")));
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    ViewHolder holder = new ViewHolder();
    View v = null;

    if (cursor.getString(cursor.getColumnIndex("type")).equals("1")) {
        v = mInflater.inflate(R.layout.message1, parent, false);
        holder.textView = (TextView) v
                .findViewById(R.id.textView1);
    } else {
        v = mInflater.inflate(R.layout.message2, parent, false);
        holder.textView = (TextView) v
                .findViewById(R.id.textView2);
    }

    v.setTag(holder);
    return v;
}

public static class ViewHolder {
    public TextView textView;
}

关于android - 具有不同行布局的光标适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479833/

相关文章:

android - AChartEngine:mBarSpacing和mBarWidth的关系

android - 我们如何在主键盘页面的焦点上显示@字符键盘而不需要按123键盘来获取?

android - ListView 在较小的手机中出现裁剪

android - 在android上的列表(可扩展)项目内创建垂直线

android - 在 ListView 中的项目上应用项目单击监听器

android - 如何在android sqlite操作中将图像存储为字符串

android - 获取资源值时没有包标识符

java - SQLite数据库 ListView

android - 如何使用 CursorAdapter 从 ListView 中删除选定的项目

自定义 cursorAdapter 的 android newView/bindView 未调用