Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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
RecycleView-Android/Java中的可自定义适配器存在问题_Java_Android_Android Studio_Android Recyclerview - Fatal编程技术网

RecycleView-Android/Java中的可自定义适配器存在问题

RecycleView-Android/Java中的可自定义适配器存在问题,java,android,android-studio,android-recyclerview,Java,Android,Android Studio,Android Recyclerview,我正在用TextView、EditText和CheckBox实现一个可定制的适配器。我设法使所有项目都显示在我的RecycleView中,但是当选中复选框时,例如,下面某个项目的另一个复选框也被选中,编辑EditText时也会出现同样的情况,当更改某个项目的值时,列表中的另一个项目也会更改相同的值。我不知道如何避免这种情况,因为我执行了viewholder的看似正确的实现,请遵循实现下面的代码: 回收审查: <?xml version="1.0" encoding=&q

我正在用TextView、EditText和CheckBox实现一个可定制的适配器。我设法使所有项目都显示在我的RecycleView中,但是当选中复选框时,例如,下面某个项目的另一个复选框也被选中,编辑EditText时也会出现同样的情况,当更改某个项目的值时,列表中的另一个项目也会更改相同的值。我不知道如何避免这种情况,因为我执行了viewholder的看似正确的实现,请遵循实现下面的代码:

回收审查:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ActivityListaDisciplinaDiario">

<android.support.v7.widget.RecyclerView
    android:id="@+id/lista_bncc"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />


</android.support.constraint.ConstraintLayout>
适配器实现代码:

public class Adapter_Lista_Bncc extends RecyclerView.Adapter {

private List<Pesquisa> lista;

private Context context;

public Adapter_Lista_Bncc(List<Pesquisa> lista, Context context){

    this.lista = lista;
    this.context = context;

}


@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    View view = LayoutInflater.from(context).inflate(R.layout.adapter_lista_bncc, viewGroup, false);

    NossoViewHolder holder = new NossoViewHolder(view);


    return holder;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

    NossoViewHolder holder = (NossoViewHolder) viewHolder;

    Pesquisa p = lista.get(i);

    holder.txt_bncc.setText(p.getVar1());
    holder.txt_descricao_bncc.setText(p.getVar2());
    holder.timer.setFilters(new InputFilter[]{new MinMaxFilter("1", "60")});

}

@Override
public int getItemCount() {
    return lista.size();
}

public class NossoViewHolder extends RecyclerView.ViewHolder{

    final TextView txt_bncc;
    final TextView txt_descricao_bncc;
    final EditText timer;
    final CheckBox check;

    public NossoViewHolder(View v){
        super(v);

        txt_bncc = (TextView) v.findViewById(R.id.txt_bncc);
        txt_descricao_bncc = (TextView) v.findViewById(R.id.txt_descricao_bncc);
        timer = (EditText) v.findViewById(R.id.timer);
        check = (CheckBox) v.findViewById(R.id.checkbox_bncc);

    }

}
}
公共类适配器\u Lista\u Bncc扩展了RecyclerView.Adapter{
私人名单清单a;
私人语境;
公共适配器\u Lista\u Bncc(列表Lista,上下文){
this.lista=lista;
this.context=上下文;
}
@非空
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
视图=LayoutFlater.from(context).充气(R.layout.adapter\u lista\u bncc,viewGroup,false);
Nossovieworlder支架=新的Nossovieworlder(视图);
报税表持有人;
}
@凌驾
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder ViewHolder,int i){
nossoviewolder holder=(nossoviewolder)视图持有者;
Pesquisa p=lista.get(i);
holder.txt_bncc.setText(p.getVar1());
holder.txt_descripao_bncc.setText(p.getVar2());
holder.timer.setFilters(新的InputFilter[]{new MinMaxFilter(“1”,“60”)});
}
@凌驾
public int getItemCount(){
返回lista.size();
}
公共类NossoViewHolder扩展了RecyclerView.ViewHolder{
最终文本视图txt_bncc;
最终文本视图文本描述;
最终编辑文本计时器;
最终复选框检查;
公共Nossovieworlder(视图五){
超级(五);
txt_bncc=(TextView)v.findviewbyd(R.id.txt_bncc);
txt_descripcao_bncc=(TextView)v.findViewById(R.id.txt_descripcao_bncc);
timer=(EditText)v.findViewById(R.id.timer);
check=(复选框)v.findviewbyd(R.id.CheckBox_bncc);
}
}
}

我可以提供更多有关情况的信息,我感谢您的关注和任何能够提供帮助的人。

好的,首先为了获得更好的性能,请迁移到Androidx并在单击列表器上实现,在适配器上,您应该实现接口以传递您的位置,以便您可以在活动中访问并更改它们。我将更正您的适配器,如下面的复选框所示只检查其他人

public class Adapter_Lista_Bncc extends RecyclerView.Adapter {

private List<Pesquisa> lista;

private Context context;
// here is our interface 
private OnItemClickListner listner;

public Adapter_Lista_Bncc(List<Pesquisa> lista, Context context){

    this.lista = lista;
    this.context = context;

}


@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    View view = LayoutInflater.from(context).inflate(R.layout.adapter_lista_bncc, viewGroup, false);

    NossoViewHolder holder = new NossoViewHolder(view);


    return holder;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

    NossoViewHolder holder = (NossoViewHolder) viewHolder;

    Pesquisa p = lista.get(i);

    holder.txt_bncc.setText(p.getVar1());
    holder.txt_descricao_bncc.setText(p.getVar2());
    holder.timer.setFilters(new InputFilter[]{new MinMaxFilter("1", "60")});

}

@Override
public int getItemCount() {
    return lista.size();
}
// implemet on click listner
public class NossoViewHolder extends RecyclerView.ViewHolder implements View.OnClickLisntener{

    final TextView txt_bncc;
    final TextView txt_descricao_bncc;
    final EditText timer;
    final CheckBox check;

    public NossoViewHolder(View v){
        super(v);

        txt_bncc = (TextView) v.findViewById(R.id.txt_bncc);
        txt_descricao_bncc = (TextView) v.findViewById(R.id.txt_descricao_bncc);
        timer = (EditText) v.findViewById(R.id.timer);
        check = (CheckBox) v.findViewById(R.id.checkbox_bncc);
       check.setOnClickListener(this);


    }
@Override
public void onClick(View view)
{
// you should have to pass your position i.e what position what your clicking
int position = getAdapterPosition();
// to avoid erro if recyclerView is empty use rvNo position
if(listner!=null && position!= RecyclerView.No_Position)
{
listner.onClick(lista.get(position),view);
}

}
}

// here is Interface
public interface OnItemClickListner{
void onClick(Pesquisa xyz,View view);
}
public void setOnItemClicklistner(// interface OnItemClickListner lis)
{
this.listner = lis;
}
}
public class Adapter_Lista_Bncc extends RecyclerView.Adapter {

private List<Pesquisa> lista;

private Context context;

public Adapter_Lista_Bncc(List<Pesquisa> lista, Context context){

    this.lista = lista;
    this.context = context;

}


@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    View view = LayoutInflater.from(context).inflate(R.layout.adapter_lista_bncc, viewGroup, false);

    NossoViewHolder holder = new NossoViewHolder(view);


    return holder;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

    NossoViewHolder holder = (NossoViewHolder) viewHolder;

    Pesquisa p = lista.get(i);

    holder.txt_bncc.setText(p.getVar1());
    holder.txt_descricao_bncc.setText(p.getVar2());
    holder.timer.setFilters(new InputFilter[]{new MinMaxFilter("1", "60")});

}

@Override
public int getItemCount() {
    return lista.size();
}

public class NossoViewHolder extends RecyclerView.ViewHolder{

    final TextView txt_bncc;
    final TextView txt_descricao_bncc;
    final EditText timer;
    final CheckBox check;

    public NossoViewHolder(View v){
        super(v);

        txt_bncc = (TextView) v.findViewById(R.id.txt_bncc);
        txt_descricao_bncc = (TextView) v.findViewById(R.id.txt_descricao_bncc);
        timer = (EditText) v.findViewById(R.id.timer);
        check = (CheckBox) v.findViewById(R.id.checkbox_bncc);

    }

}
}
public class Adapter_Lista_Bncc extends RecyclerView.Adapter {

private List<Pesquisa> lista;

private Context context;
// here is our interface 
private OnItemClickListner listner;

public Adapter_Lista_Bncc(List<Pesquisa> lista, Context context){

    this.lista = lista;
    this.context = context;

}


@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    View view = LayoutInflater.from(context).inflate(R.layout.adapter_lista_bncc, viewGroup, false);

    NossoViewHolder holder = new NossoViewHolder(view);


    return holder;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

    NossoViewHolder holder = (NossoViewHolder) viewHolder;

    Pesquisa p = lista.get(i);

    holder.txt_bncc.setText(p.getVar1());
    holder.txt_descricao_bncc.setText(p.getVar2());
    holder.timer.setFilters(new InputFilter[]{new MinMaxFilter("1", "60")});

}

@Override
public int getItemCount() {
    return lista.size();
}
// implemet on click listner
public class NossoViewHolder extends RecyclerView.ViewHolder implements View.OnClickLisntener{

    final TextView txt_bncc;
    final TextView txt_descricao_bncc;
    final EditText timer;
    final CheckBox check;

    public NossoViewHolder(View v){
        super(v);

        txt_bncc = (TextView) v.findViewById(R.id.txt_bncc);
        txt_descricao_bncc = (TextView) v.findViewById(R.id.txt_descricao_bncc);
        timer = (EditText) v.findViewById(R.id.timer);
        check = (CheckBox) v.findViewById(R.id.checkbox_bncc);
       check.setOnClickListener(this);


    }
@Override
public void onClick(View view)
{
// you should have to pass your position i.e what position what your clicking
int position = getAdapterPosition();
// to avoid erro if recyclerView is empty use rvNo position
if(listner!=null && position!= RecyclerView.No_Position)
{
listner.onClick(lista.get(position),view);
}

}
}

// here is Interface
public interface OnItemClickListner{
void onClick(Pesquisa xyz,View view);
}
public void setOnItemClicklistner(// interface OnItemClickListner lis)
{
this.listner = lis;
}
}
adapter.setOnItemClicklistner(new //your adapter. Onclick Listner) 
{
@override 
public void onClick(...auto generated)
{
// do your stuff using instance of check box
}
}