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我也面临同样的问题。你到底是如何解决你的问题的?