当前位置: 首页 > 知识库问答 >
问题:

如何使用CursorRecyclerViewAdapter获取MultipleView类型?

郭阳曜
2023-03-14

我对如何使用CursorRecyclerViewAdapter使用multipleView类型有疑问,我可以使用两种布局,但只获得第一个项目的头,而不是所有项目的头。如何做到这一点,到目前为止,我尝试过的是:

import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;

import java.util.List;

import model.CustomerModel;
import timertracker.precision.timetracker.R;
import timertracker.precision.timetracker.RecyclerViewFastScroller;

public class CustomerListAdapter extends CursorRecycleViewAdapter<CustomerListAdapter.ViewHolder>  implements View.OnClickListener , RecyclerViewFastScroller.BubbleTextGetter{
    int position;
    Cursor cursor;
    ColorGenerator generator = ColorGenerator.MATERIAL;
    private OnItemClickListener onItemClickListener;
    List<CustomerModel>list;
    public static final int ITEM_TYPE_NORMAL = 1;
    public static final int ITEM_TYPE_HEADER = 0;    

    public CustomerListAdapter(Context mContext, Cursor cursor) {
        super(mContext, cursor);    
    }

    public void setOnItemClickListener(final OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    @Override
    public String getTextToShowInBubble(int pos) {
        return Character.toString(cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_Name)).charAt(0));
    }

    public static class MyViewHolder extends ViewHolder {
        TextView textname;
        TextView status;
        TextView textphnum;
        TextView textdegree;
        TextView textemail;
        ImageView call;
        TextView header;
        public MyViewHolder(final View itemView) {
            super(itemView);
                this.textname = (TextView) itemView.findViewById(R.id.subject);
                this.status = (TextView) itemView.findViewById(R.id.customerstatus);
                this.textemail = (TextView) itemView.findViewById(R.id.username);
                this.textdegree = (TextView) itemView.findViewById(R.id.status);
                this.call = (ImageView) itemView.findViewById(R.id.imageView);    
        }
    }

    public static class Headers extends ViewHolder {
      TextView header;
        public Headers(final View itemView) {
            super(itemView);
            this.header = (TextView) itemView.findViewById(R.id.header); 

        }
    }
    @Override
    public int getItemViewType(int position) {
      if(position==ITEM_TYPE_NORMAL)
        return 1;

        return 0;    
    }

  public static class ViewHolder extends RecyclerView.ViewHolder {
        public ViewHolder(View v) {
            super(v);
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent,
                                           int viewType) {
        if(viewType==ITEM_TYPE_NORMAL){
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.customeradapterview, parent, false);

        MyViewHolder myViewHolder = new MyViewHolder(view);
        view.setOnClickListener(this);
        return myViewHolder;
        }
        else if(viewType==ITEM_TYPE_HEADER){
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.header, parent, false);
             Headers headers = new Headers(view);
             return headers;
        }
        return null;
    }    

    @Override
    public void onBindViewHolder(ViewHolder holder, Cursor cursor) {
           String  customrename = cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_Name));
        String email=cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_EmailID));
        if(holder.getItemViewType()==1) {
            MyViewHolder holders=(MyViewHolder)holder;
            TextView textViewName = holders.textname;
            TextView textstatus = holders.status;
            TextView textphnumbr = holders.textdegree;
            TextView textemail=holders.textemail;
          //  ImageView call=holders.call;
            if (email.length() >= 20) {
                String s = email.substring(0, 20) + "...";
                textemail.setText(s);
            } else {
                textemail.setText(email);
            }
            //textemail.setText(cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_EmailID)));
            String status = cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_Status));
            if (status.equals("Active")) {
                textstatus.setTextColor(Color.parseColor("#006400"));
            } else {
                textstatus.setTextColor(Color.parseColor("#8B0000"));
            }
            textstatus.setText(status);
            textphnumbr.setText(cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_MobileNumber)));
            String s1 = customrename.substring(0, 1).toUpperCase() + customrename.substring(1).toLowerCase();
            textViewName.setText(s1);
            ColorGenerator generator = ColorGenerator.DEFAULT;
            String com = s1.substring(0, 1);
            TextDrawable drawable = TextDrawable.builder()
                    .buildRound((com).toUpperCase(), generator.getRandomColor());
            holders.call.setImageDrawable(drawable);

        }
        else if(holder.getItemViewType()==0) {
            Headers header=(Headers)holder;
            String s1 = customrename.substring(0, 1).toUpperCase() + customrename.substring(1).toLowerCase();
            String com = s1.substring(0, 1);
            header.header.setText(com);    
        }
    }

    @Override
    public void onClick(View v) {
        final RecyclerView recyclerView = (RecyclerView) v.getParent();
        position = recyclerView.getChildLayoutPosition(v);
        if (position != RecyclerView.NO_POSITION) {
            final Cursor cursor = this.getItem(position);
            this.onItemClickListener.onItemClicked(cursor);
        }    
    }

    public interface OnItemClickListener {
        void onItemClicked(Cursor cursor);
    }    
}

如果我删除OnBindViewWholder中的条件,下面是我的Logcat消息:

共有1个答案

南宫鸿晖
2023-03-14

以下是完整的解决方案:

    public static final int HEADER_VIEW = 0;
        public static final int NORMAL_VIEW = 1;
private String headerName="";

    getItemViewType(Cursor cursor) { 
    //Based on your Header and Item view condition return either the header view or normal view.
 String  customrename = cursor.getString(cursor.getColumnIndex(CustomerModel.Customer_Name));
     String s1 = customrename.substring(0, 1).toUpperCase() + customrename.substring(1).toLowerCase();
            String headerNameTemp = s1.substring(0, 1);
             if(headerNameTemp.equals(headerName))
{
return NORMAL_VIEW; 
}
else
{
headerName=headerNameTemp;
return HEADER_VIEW; 
}
} 

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

希望能有所帮助。

 类似资料:
  • 问题内容: 我正在尝试使用Guava文档示例中所示的方式在运行时查找类型参数: 运行此代码时,将得到输出。为什么不反而变得呢? 问题答案: 此“ hack”不适用于运行时类型的值。 Java无法在此处实例化类时传播推断的类型参数 到宣言 因此,不知道应该指的是什么。 该的Javadoc状态 构造一个新的类型标记,同时 在的上下文中解析自由类型变量 。 客户端创建一个空的匿名子类。 这样做会将类型参

  • 知道如何根据Jackson的ObjectMapper对象和特定的Class检索给定json路径的Java类型吗? 假设我们有 Jackson的ObjectMapper我想找到一种方法,将字符串值反序列化到给定路径上由字段表示的类型的对象(或至少获取其类型),例如。 给定“/accountOwner/age”和“25”得到25(整数类型) 给定“/accountOwner/active”和“true

  • 问题内容: 我是selenium测试的新手。我想使用selenium获取css类名。我正在使用eclipse和Java进行开发。 有什么方法可以使用selenium获得类名“ odd”或“ even”?一世 问题答案: 是的,您可以根据需要使用功能。 指定需要知道其类的元素的Xpath。 谢谢。

  • 问题内容: 我使用PDO和MySQL,出于某种原因,当从数据库中获取int类型的值时,PDOStatement返回的是数字的字符串表示形式,而不是数字类型的值。如何防止这种情况发生? 我注意到有一个PDO类的属性:应该可以解决这个问题,但是在尝试修改它时,它抛出一个错误,指出该属性对MySQL驱动程序无效。 查询数据库时,获取字符串而不是数字是否正常? 问题答案: 我不认为可以在PHP 5.2中完

  • 我有以下类桥联图: 我将JUnit测试用例编写为: 但我不知道该断言什么:

  • 当我执行时,它也打印和,我如何在Python中使用selenium只获取示例文本?