我正在尝试在应用程序中实现类似功能,这里是回收视图中Viewholder的片段 .
Recycler customadapter
public class PostAdapterViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView title,user,description,tag,time,designation;
Long date;
ImageView imageView,bookmark,profilepic,sharebutton,like;
RelativeLayout head;
LinearLayout content;
DatabaseReference reference;
Context context;
String name;
public void setContext(Context context) {
this.context = context;
}
public PostAdapterViewHolder (final View itemView) {
super(itemView);
itemView.setOnClickListener(this);
head = (RelativeLayout) itemView.findViewById(R.id.head);
content = (LinearLayout) itemView.findViewById(R.id.content);
imageView =(ImageView)itemView.findViewById(R.id.imageview);
designation = (TextView) itemView.findViewById(R.id.designation);
like =(ImageView)itemView.findViewById(R.id.like);
profilepic = (ImageView) itemView.findViewById(R.id.imageView2);
bookmark =(ImageView)itemView.findViewById(R.id.bookmark);
title = (TextView) itemView.findViewById(R.id.title);
description = (TextView) itemView.findViewById(R.id.description);
time = (TextView) itemView.findViewById(R.id.date);
tag = (TextView) itemView.findViewById(R.id.tag);
sharebutton = (ImageView) itemView.findViewById(R.id.sharebutton);
user = (TextView) itemView.findViewById(R.id.username);
like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView i = (ImageView) itemView.findViewById(R.id.like);
Drawable a = i.getBackground();
if (a.getConstantState().equals(context.getDrawable(R.drawable.emptyup).getConstantState())){
i.setImageDrawable(context.getDrawable(R.drawable.fillup));
} else {
i.setImageDrawable(context.getDrawable(R.drawable.emptyup));
}
}
});
}
}
}
01-09 10:43:45.747 6602-6602 / ctize.connectplus.com.communitize E / AndroidRuntime:FATAL EXCEPTION:main进程:ctize.connectplus.com.communitize,PID:6602 android.content.res.Resources $ NotFoundException :资源ID#0x7f07007e在android.content.res.Resources.getValue(Resources.java:1397)的android.content.res.Resources.getDrawable(Resources.java:843)android.content.Context.getDrawable(Context . ) java:458)at ctize.connectplus.com.communitize.PostAdapterViewHolder $ 2.onClick(PostAdapterViewHolder.java:98)at android.view.View.performClick(View.java:5226)at android.view.View $ PerformClick.run( View.java:21350)在android.os.Handler.handleCallback(Handler.java:739)android.os.Handler.dispatchMessage(Handler.java:95)android.os.Looper.loop(Looper.java:148) )在android.app.ActivityThread.main(ActivityThread.java:5582)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) )在com.android.internal.os.Zygo teInit.main(ZygoteInit.java:616)
6 回答
通过查看日志 . 问题出在你的
drawable
背景中看一看 . 您有类型X24
图像更改它,它将解决您的问题 .第二件事是你一次看到两个图像 . 所以你需要删除你在
.xml
文件中设置的背景,你就可以了 .您正在使用
context.getDrawable(R.drawable.fillup)
,它仅适用于高于 LOLLIPOP 的版本 . 使用context.getResources().getDrawable(R.drawable.fillup)
从资源中获取图像 .尝试使用复选框而不是ImageView
} else {
i.setImageDrawable(context.getDrawable(R.drawable.emptyup));
}
由于你的Android版本问题,这些行给你错误 .
按照这个https://developer.android.com/guide/topics/graphics/vector-drawable-resources.html#vector-drawables-backward-solution,您应该使用setImageResource()而不是setImageDrawable()
应该显示相关活动时您的应用程序崩溃了吗?
检查你的活动中是否有像这样的可绘制的v24
然后,如果是,请将文件的显示从
Android
更改为文件层次结构最顶部的Project
:来自至
并将目录
drawable v-24
中的drawable拖放到目录drawable
.就这样 . 试试它是否正常
请尝试一个干净的构建,可能是R文件是错误的