Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在点击按钮时更新回收器视图中的文本视图?_Java_Android_Android Recyclerview - Fatal编程技术网

Java 如何在点击按钮时更新回收器视图中的文本视图?

Java 如何在点击按钮时更新回收器视图中的文本视图?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我想为我的列表项创建一个like按钮,每当我单击like按钮时,文本视图应该会动态更新。但当我单击该按钮时,只有最后一行得到更新,其余的不会更改。请指导我完成在列表项中创建like按钮的任务。(我使用likebutton库创建like按钮) RecycleServiceAdapter.java public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{

我想为我的列表项创建一个like按钮,每当我单击like按钮时,文本视图应该会动态更新。但当我单击该按钮时,只有最后一行得到更新,其余的不会更改。请指导我完成在列表项中创建like按钮的任务。(我使用likebutton库创建like按钮)

RecycleServiceAdapter.java

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