CursorAdapter的不同行布局 [英] cursoradapter with different row layouts

查看:110
本文介绍了CursorAdapter的不同行布局的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建使用两种不同的布局取决于光标一些数据的自定义的CursorAdapter。我一直在阅读有关压倒一切的getViewTypeCount()和getItemViewType()要做到这一点,但我似乎无法弄清楚如何实施这一..

这是我的code为bindView及新方法:

  @覆盖
公共无效bindView(查看视图,上下文的背景下,光标光标){
    TextView的tView =(TextView中)view.findViewById(R.id.TextView1);
    tView.setText(以下简称文);
}

@覆盖
公共查看NewView的(上下文的背景下,光标光标的ViewGroup父){
    返回mInflater.inflate(R.layout.item1,父母,假);
}
 

编辑: 现在,我得到这个工作,但我想选择什么样的RowLayout取决于光标一些数据使用,我不能让那个工作..任何人有一些想法?

  @覆盖
公众诠释getItemViewType(INT位置){
    返回位置%2;
}

@覆盖
公众诠释getViewTypeCount(){
    返回2;
}

@覆盖
公共无效bindView(查看视图,上下文的背景下,光标光标){
    ViewHolder支架=(ViewHolder)view.getTag();
    holder.txtAddress
            .setText(布拉布拉);
}

@覆盖
公共查看NewView的(上下文的背景下,光标光标的ViewGroup父){
    ViewHolder持有人=新ViewHolder();
    视图V = NULL;
    整型= cursor.getPosition()%2;
    如果(类型== 0){
        V = mInflater.inflate(R.layout.item,父母,假);
    } 其他 {
        V = mInflater.inflate(R.layout.item2,父母,假);
    }

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

    v.setTag(保持器);
    返回伏;
}
 

解决方案

所以,我终于得到了它的工作。对于有兴趣的工作code的那些是如下:

 私人诠释getItemViewType(光标指针){
    字符串类型= cursor.getString(cursor.getColumnIndex(类));
    如果(type.equals(1)){
        返回0;
    } 其他 {
        返回1;
    }
}

@覆盖
公众诠释getItemViewType(INT位置){
    光标光标=(光标)的getItem(位置);
    返回getItemViewType(光标);
}

@覆盖
公众诠释getViewTypeCount(){
    返回2;
}

@覆盖
公共无效bindView(查看视图,上下文的背景下,光标光标){
    ViewHolder支架=(ViewHolder)view.getTag();
    holder.textView
            .setText(cursor.getString(cursor.getColumnIndex(身体)));
}

@覆盖
公共查看NewView的(上下文的背景下,光标光标的ViewGroup父){
    ViewHolder持有人=新ViewHolder();
    视图V = NULL;

    如果(cursor.getString(cursor.getColumnIndex(类型))。等于(1)){
        V = mInflater.inflate(R.layout.message1,父母,假);
        holder.textView =(TextView中)V
                .findViewById(R.id.textView1);
    } 其他 {
        V = mInflater.inflate(R.layout.message2,父母,假);
        holder.textView =(TextView中)V
                .findViewById(R.id.textView2);
    }

    v.setTag(保持器);
    返回伏;
}

公共静态类ViewHolder {
    公众的TextView TextView的;
}
 

I'm trying to create a custom cursoradapter that will use two different layouts depending on some data in the cursor. I keep reading about 'overriding getViewTypeCount() and getItemViewType()' to make this happen but I can't seem to figure out how to implement this..

This is my code for the bindView and new View methods:

@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);
}

.

EDIT: Now I got this working, but I want to choose what rowlayout to use depending on some data in the cursor and I can't get that working.. anybody got some ideas?

@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;
}

解决方案

So I finally got it work. For the ones interested the working code is below:

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;
}

这篇关于CursorAdapter的不同行布局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆