Java recyclerview.onBindviewholder始终处于位置0

Java recyclerview.onBindviewholder始终处于位置0,java,android,android-recyclerview,Java,Android,Android Recyclerview,recyclerview.onbindviewholder始终处于位置0 public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.ViewHolder> { public static final int UNCOMPLETED = 0; public static final int COMPLETED = 1; public static final int HIGHTLIGHT

recyclerview.onbindviewholder
始终处于位置0

public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.ViewHolder> {

    public static final int UNCOMPLETED = 0;
    public static final int COMPLETED = 1;
    public static final int HIGHTLIGHT = 2;
    public static final int HIGHTLIGHT_COMPETED = 3;
    Cursor cursor;
    Context context;

    public NoteAdapter(Context context, Cursor cursor) {
        this.context = context;
        this.cursor = cursor;
    }

    public Cursor getCursor() {
        return this.cursor;
    }

    public void setCursor(Cursor cursor) {
        this.cursor = cursor;
    }

    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = context;
    }

    @Override
    public int getItemViewType(int position) {
        if (cursor.moveToPosition(position)) {
            cursor.move(position);
            String content = cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_CONTENT));
            int completed = cursor.getInt(cursor.getColumnIndex(DatabaseHandler.KEY_COMPLETED));
            int hightlight = cursor.getInt(cursor.getColumnIndex(DatabaseHandler.KEY_HIGHTLIGHT));


            if (completed == 1) {
                if (hightlight == 1) {
                    return HIGHTLIGHT_COMPETED;
                }
                return COMPLETED;
            }

            if (hightlight == 1 && completed == 0) {
                return HIGHTLIGHT;
            }

            return UNCOMPLETED;
        }
        return -1;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.item_row, parent, false);

        switch (viewType) {
            case UNCOMPLETED:
                view = inflater.inflate(R.layout.item_row, parent, false);
                break;
            case COMPLETED:
                view = inflater.inflate(R.layout.item_row_completed, parent, false);
                break;
            case HIGHTLIGHT:
                view = inflater.inflate(R.layout.item_row_hightlight, parent, false);
                break;
            case HIGHTLIGHT_COMPETED:
                view = inflater.inflate(R.layout.item_row_hightlight_completed, parent, false);
                break;
        }

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
        if (!cursor.moveToPosition(position)) {
            return;
        }
        String content = cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_CONTENT));
        Date date = Utilities.stringToDate(cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_DEADLINE)));

        int completed = cursor.getInt(cursor.getColumnIndex(DatabaseHandler.KEY_COMPLETED));

        holder.tvContent.setText(content);
        holder.tvDate.setText(Utilities.dateToString(date));

        if(completed == 1){
            holder.imgIcon.performClick();
        }
    }

    @Override
    public int getItemCount() {
        return (cursor.getCount());
    }



    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView tvContent;
        TextView tvDate;
        ImageButton imgIcon;

        public ViewHolder(@NonNull final View itemView) {
            super(itemView);

            tvContent = itemView.findViewById(R.id.tvContent);
            tvDate = itemView.findViewById(R.id.tvDate);
            imgIcon = itemView.findViewById(R.id.imgCheck);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position = getAdapterPosition();
                    cursor.move(position);

                    Note note = Utilities.cursorToNote(cursor);
                    Intent intent = new Intent(itemView.getContext(), AddNoteActivity.class);
                    intent.putExtras(note.sendNoteBundle());
                    intent.putExtra("type", true);
                    itemView.getContext().startActivity(intent);

                }
            });
        }
    }
}
公共类NoteAdapter扩展了RecyclerView.Adapter{ 公共静态最终整数未完成=0; 公共静态最终完成整数=1; 公共静态最终int高亮度=2; 公共静态决赛int HIGHTLIGHT_Competited=3; 光标; 语境; 公共NoteAdapter(上下文上下文、游标){ this.context=上下文; this.cursor=游标; } 公共游标getCursor(){ 返回此.cursor; } 公共void集合游标(游标游标){ this.cursor=游标; } 公共上下文getContext(){ 返回上下文; } 公共void setContext(上下文){ this.context=上下文; } @凌驾 public int getItemViewType(int位置){ if(光标移动位置(位置)){ 光标移动(位置); 字符串内容=cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_content)); int completed=cursor.getInt(cursor.getColumnIndex(DatabaseHandler.KEY_completed)); int hightlight=cursor.getInt(cursor.getColumnIndex(DatabaseHandler.KEY_hightlight)); 如果(已完成==1){ 如果(高亮度==1){ 返回高光灯比赛; } 返回已完成; } 如果(hightlight==1&&completed==0){ 返回远光灯; } 返回未完成; } 返回-1; } @非空 @凌驾 public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){ LayoutFlater充气机=LayoutFlater.from(上下文); 视图=充气机。充气(R.layout.item_行,父项,false); 开关(视图类型){ 案件未完成: 视图=充气机。充气(R.layout.item_行,父项,false); 打破 个案完成: 视图=充气机。充气(R.layout.item\u row\u completed,parent,false); 打破 箱高光: 视图=充气机。充气(R.layout.item\u row\u hightlight,父项,false); 打破 案例高光乇竞争: 视图=充气机。充气(R.layout.item\u row\u hightlight\u completed,parent,false); 打破 } 返回新的ViewHolder(视图); } @凌驾 public void onBindViewHolder(@NonNull final ViewHolder,int位置){ 如果(!cursor.moveToPosition(位置)){ 返回; } 字符串内容=cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_content)); Date Date=Utilities.stringToDate(cursor.getString(cursor.getColumnIndex(DatabaseHandler.KEY_DEADLINE)); int completed=cursor.getInt(cursor.getColumnIndex(DatabaseHandler.KEY_completed)); holder.tvContent.setText(内容); holder.tvDate.setText(Utilities.dateToString(date)); 如果(已完成==1){ holder.imgIcon.performClick(); } } @凌驾 public int getItemCount(){ 返回(cursor.getCount()); } 公共类ViewHolder扩展了RecyclerView.ViewHolder{ 文本查看电视内容; 文本视图日期; 图像按钮; 公共视图持有者(@NonNull final View itemView){ 超级(项目视图); tvContent=itemView.findViewById(R.id.tvContent); tvDate=itemView.findviewbyd(R.id.tvDate); imgIcon=itemView.findviewbyd(R.id.imgCheck); itemView.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ int position=getAdapterPosition(); 光标移动(位置); 注释=实用程序.cursorToNote(游标); Intent Intent=new Intent(itemView.getContext(),AddNoteActivity.class); intent.putExtras(note.sendNoteBundle()); 意图。putExtra(“类型”,真); itemView.getContext().startActivity(意图); } }); } } } 程序不包含任何错误。 当我运行程序时,它总是只显示0位置的元素,其余位置不显示

函数
getItemCount
工作正常,返回20个元素


英语不是我的母语,抱歉有语法错误。谢谢大家。

确保在不同的视图持有者的布局(xml)文件中,父布局的
android:layout\u height
设置为
wrap\u content
,而不是
match\u parent

确保布局(xml)中父布局的
android:layou height
各种视图持有者的文件已设置为
wrap\u content
,而不是
match\u parent

Hi zero,您的条件不满足。getItemViewType始终返回未完成的。谢谢回答。但getItemViewType是正确的,我尝试在getItemViewType中打印Logd,并且位置始终等于0。在0位置,getItemViewTy返回HIGHTLIGHT。感谢编辑Touhidul Islam。你好,Zeroes,您的条件未得到满足。getItemViewType始终返回未完成的。谢谢回答。但getItemViewType是正确的,我尝试在getItemViewType中打印Logd,并且位置始终等于0。在0位置,getItemViewTy返回HIGHTLIGHT。感谢编辑Tohidul Islam。感谢网络。光标。移动(位置);和布局_height=“匹配父项”。非常感谢。@Zeroes我也面临同样的问题。你到底是如何解决你的问题的?谢谢网络。光标。移动(位置);和布局_height=“匹配父项”。非常感谢。@Zeroes我也面临同样的问题。你到底是如何解决你的问题的?