Java 如何在点击按钮时更新回收器视图中的文本视图?
我想为我的列表项创建一个like按钮,每当我单击like按钮时,文本视图应该会动态更新。但当我单击该按钮时,只有最后一行得到更新,其余的不会更改。请指导我完成在列表项中创建like按钮的任务。(我使用likebutton库创建like按钮) RecycleServiceAdapter.javaJava 如何在点击按钮时更新回收器视图中的文本视图?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我想为我的列表项创建一个like按钮,每当我单击like按钮时,文本视图应该会动态更新。但当我单击该按钮时,只有最后一行得到更新,其余的不会更改。请指导我完成在列表项中创建like按钮的任务。(我使用likebutton库创建like按钮) RecycleServiceAdapter.java public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
private static final String TAG = "hh";
private String[] names;
private String[] desc;
private Integer[] imageid;
private Context context1;
ImageButton sare;
public ImageView img;
LikeButton likeButton;
TextView tx1;
TextView tx2;
TextView tx3;
TextView tx4;
public RecyclerViewAdapter(Context context2,String[] names,String[] desc,Integer[] imageid){
this.names = names;
this.desc = desc;
this.imageid = imageid;
context1 = context2;
}
public class ViewHolder extends RecyclerView.ViewHolder{
public LikeButton likeButton;
public ViewHolder(View v){
super(v);
}
}
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view1 = LayoutInflater.from(context1).inflate(R.layout.recycler_view_items,parent,false);
ViewHolder viewHolder1 = new ViewHolder(view1);
img = (ImageView) view1.findViewById(R.id.imgview1);
likeButton = (LikeButton) view1.findViewById(R.id.cvcv);
tx3 = (TextView)view1.findViewById(R.id.counttxt);
likeButton.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(LikeButton likeButton) {
int count = Integer.parseInt(tx3.getText().toString());
Log.d("fgfgfgfgf", String.valueOf(count));
tx3.setText(String.valueOf(++count));
//tx3.setText(String.valueOf(Homefragment.countt));
}
@Override
public void unLiked(LikeButton likeButton) {
}
});
return viewHolder1;
}
@Override
public void onBindViewHolder(ViewHolder Vholder,final int position){
if(imageid[position] != null) {
// img.setImageBitmap(imageid[position]);
}
else{
}
img.setImageResource(imageid[position]);
tx1.setText(names[position]);
Vholder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getItemCount(){
return desc.length;
}
}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
私有静态最终字符串TAG=“hh”;
私有字符串[]名称;
私有字符串[]desc;
私有整数[]imageid;
私人语境1;
图像按钮;
公共图像视图img;
喜欢按钮喜欢按钮;
TextView tx1;
TextView tx2;
TextView tx3;
TextView tx4;
公共RecycleServiceAdapter(上下文上下文2,字符串[]名称,字符串[]说明,整数[]图像ID){
this.names=名称;
this.desc=desc;
this.imageid=imageid;
context1=context2;
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公众喜欢钮扣喜欢钮扣;
公共视图持有者(视图v){
超级(五);
}
}
@凌驾
public RecycleServiceAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
查看视图1=LayoutFlater.from(context1)。充气(R.layout.recycler\u View\u items,父项,false);
ViewHolder viewHolder1=新的ViewHolder(view1);
img=(ImageView)视图1.findViewById(R.id.imgViewW1);
likeButton=(likeButton)视图1.findViewById(R.id.cvcv);
tx3=(TextView)view1.findViewById(R.id.counttxt);
likeButton.setOnLikeListener(新的OnLikeListener(){
@凌驾
公共按钮(LikeButton LikeButton){
int count=Integer.parseInt(tx3.getText().toString());
Log.d(“fgf”,String.valueOf(count));
tx3.setText(String.valueOf(++count));
//setText(String.valueOf(Homefragment.countt));
}
@凌驾
公共无效未链接(LikeButton LikeButton){
}
});
返回viewHolder1;
}
@凌驾
公共无效onBindViewHolder(ViewHolder Vholder,最终int位置){
if(imageid[位置]!=null){
//img.setImageBitmap(imageid[位置]);
}
否则{
}
img.setImageResource(imageid[位置]);
tx1.setText(名称[位置]);
Vholder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
}
});
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
@凌驾
public int getItemCount(){
返回描述长度;
}
}
回收器\u视图\u items.xml
<ConstraintLayout>
............
<LikeButton>
....
</LikeButton>
<TextView>
....
</TextView>
</ConstraintLayout>
............
....
....
更换
tx3=(TextView)view1.findviewbyd(R.id.counttxt)代码>
与
TextView tx3=(TextView)view1.findViewById(R.id.counttxt)代码>
及
likeButton=(likeButton)视图1.findViewById(R.id.cvcv)代码>
与
LikeButton LikeButton=(LikeButton)视图1.findViewById(R.id.cvcv)代码>
在您的代码中,您使用的是与tx3
和likebutton
相同的实例,它保存了最后一个值,希望这有助于替换
public class ViewHolder extends RecyclerView.ViewHolder{
LikeButton likeButton;
TextView tx1;
TextView tx2;
TextView tx3;
TextView tx4;
public ViewHolder(View v){
super(v);
img = (ImageView) v.findViewById(R.id.imgview1);
likeButton = (LikeButton) v.findViewById(R.id.cvcv);
tx3 = (TextView)v.findViewById(R.id.counttxt);
}
}
tx3=(TextView)view1.findviewbyd(R.id.counttxt)代码>
与
TextView tx3=(TextView)view1.findViewById(R.id.counttxt)代码>
及
likeButton=(likeButton)视图1.findViewById(R.id.cvcv)代码>
与
LikeButton LikeButton=(LikeButton)视图1.findViewById(R.id.cvcv)代码>
在您的代码中,您使用的是与tx3
和likebutton
相同的实例,它保存了最后一个值,希望这有帮助
public class ViewHolder extends RecyclerView.ViewHolder{
LikeButton likeButton;
TextView tx1;
TextView tx2;
TextView tx3;
TextView tx4;
public ViewHolder(View v){
super(v);
img = (ImageView) v.findViewById(R.id.imgview1);
likeButton = (LikeButton) v.findViewById(R.id.cvcv);
tx3 = (TextView)v.findViewById(R.id.counttxt);
}
}
将OnCreateviewHolder更改为:-
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view1 = LayoutInflater.from(context1).inflate(R.layout.recycler_view_items,parent,false);
return new ViewHolder(view1);
}
@Override
public void onBindViewHolder(ViewHolder Vholder,final int position){
Vholder.img.setImageResource(imageid[position]);
Vholder.tx1.setText(names[position]);
Vholder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
Vholder.likeButton.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(LikeButton likeButton) {
//Logic
}
@Override
public void unLiked(LikeButton likeButton) {
}
});
}
OnBindViewHolder到:-
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view1 = LayoutInflater.from(context1).inflate(R.layout.recycler_view_items,parent,false);
return new ViewHolder(view1);
}
@Override
public void onBindViewHolder(ViewHolder Vholder,final int position){
Vholder.img.setImageResource(imageid[position]);
Vholder.tx1.setText(names[position]);
Vholder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
Vholder.likeButton.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(LikeButton likeButton) {
//Logic
}
@Override
public void unLiked(LikeButton likeButton) {
}
});
}
将OnCreateviewHolder更改为:-
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view1 = LayoutInflater.from(context1).inflate(R.layout.recycler_view_items,parent,false);
return new ViewHolder(view1);
}
@Override
public void onBindViewHolder(ViewHolder Vholder,final int position){
Vholder.img.setImageResource(imageid[position]);
Vholder.tx1.setText(names[position]);
Vholder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
Vholder.likeButton.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(LikeButton likeButton) {
//Logic
}
@Override
public void unLiked(LikeButton likeButton) {
}
});
}
OnBindViewHolder到:-
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view1 = LayoutInflater.from(context1).inflate(R.layout.recycler_view_items,parent,false);
return new ViewHolder(view1);
}
@Override
public void onBindViewHolder(ViewHolder Vholder,final int position){
Vholder.img.setImageResource(imageid[position]);
Vholder.tx1.setText(names[position]);
Vholder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
Vholder.likeButton.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(LikeButton likeButton) {
//Logic
}
@Override
public void unLiked(LikeButton likeButton) {
}
});
}
事实上,你完全做错了。您应该使用视图保持器模式来适应适配器布局中的小部件。您没有使用view holder,因此只会触发最后一个like,因为它具有相同的实例。实际上,您的操作完全错误。您应该使用视图保持器模式来适应适配器布局中的小部件。您没有使用view holder,因此所发生的只是最后一个like被触发,因为它具有相同的实例。尝试在BindViewHolder img.setImageResource(imageid[position])中的空对象引用错误上调用虚拟方法“void android.widget.ImageView.setImageResource(int)”;tx1.setText(名称[位置]);除了我提到的两行之外,你还改变了什么吗@科布拉金尼希诺。。我只是按照您的指示进行了操作,但是当我替换时,img.setImageResource(imageid[position])中出现了一个错误;tx1.setText(名称[位置]);我还必须使tx3成为最终版本,以便从内部类中进行访问尝试调用虚拟方法“void android.widget.ImageView.setImageResource(int)”,该虚拟方法针对BindViewHolder img.setImageResource(imageid[position])中的空对象引用错误;tx1.setText(名称[位置]);除了我提到的两行之外,你还改变了什么吗@科布拉金尼希诺。。我只是按照您的指示进行了操作,但是当我替换时,img.setImageResource(imageid[position])中出现了一个错误;tx1.setText(名称[位置]);我还必须将tx3设置为final,以便从内部类中访问。我应该在何处声明onclick of likebutton oncreationVieHolder或ViewHolder?检查更新的AnsweronBindViewHolder我应该在何处声明onclick of likebutton oncreationVieHolder或ViewHolder?检查更新的AnsweronBindViewHolder