【问题标题】:How can i fix my problem with RecyclerView and OnClickAdapter?如何解决 RecyclerView 和 OnClickAdapter 的问题?
【发布时间】:2020-03-20 20:24:19
【问题描述】:

抱歉,我有一个问题,我已经为 recyclerView 创建了广告适配器以单击我的一个项目,但它不起作用,这非常令人沮丧,您有什么想法吗? 我在旧应用程序中使用过它,它可以正常工作,但现在我不知道为什么它不起作用...... 这是我的适配器:

public class TecniciAdapter extends RecyclerView.Adapter<TecniciAdapter.MyViewHolder> {

private Context mContext;
private List<Utenti> tecniciList;
private OnTecniciListner onTecniciListner;

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    public TextView nome;
    public TextView cognome;
    public TextView stato;
    public OnTecniciListner onTecniciListner;


    public MyViewHolder(View view, OnTecniciListner onTecniciListner) {
        super(view);
        nome = view.findViewById(R.id.textNome);
        cognome = view.findViewById(R.id.textCognome);
        stato = view.findViewById(R.id.textCurrentState);
        this.onTecniciListner = onTecniciListner;
        view.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        onTecniciListner.onTecniciClick(getAdapterPosition());
    }
}

public TecniciAdapter(Context context, ArrayList<Utenti> list, OnTecniciListner onTecniciListner) {
    this.mContext = context;
    this.tecniciList = list;
    this.onTecniciListner = onTecniciListner;
}

@NonNull
@Override
public TecniciAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(mContext)
            .inflate(R.layout.technician_item, viewGroup, false);

    return new TecniciAdapter.MyViewHolder(view, onTecniciListner);
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
    myViewHolder.nome.setText(tecniciList.get(i).getNome());
    myViewHolder.cognome.setText(tecniciList.get(i).getCognome());
    myViewHolder.stato.setText(tecniciList.get(i).getStato());
}

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

public interface OnTecniciListner{
    void onTecniciClick(int position);
}

}

这是片段中的部分:

TecniciAdapter adapter = new TecniciAdapter(getActivity(), tecniciList, TecniciFragment.this);
                RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
                recyclerView.setLayoutManager(mLayoutManager);
                recyclerView.setAdapter(adapter);

我的片段中也有这个:

    @Override
public void onTecniciClick(int position) {
    Utenti tecnici = tecniciList.get(position);
    Intent intent = new Intent(getActivity(), LoginActivity.class);
    startActivity(intent);
}

【问题讨论】:

  • 这能回答你的问题吗? How to add Onclick listener to recycler view
  • “它不起作用”的描述性不足以帮助人们理解您的问题。相反,描述观察到的确切行为是什么以及预期的行为应该是什么。对于 UI 问题,屏幕截图或视频通常会有所帮助。包括任何错误消息的确切措辞(包括任何异常的完整stack trace,如果适用,以及产生它的代码行)。请参阅How to AskHow to create a Minimal, Reproducible Example
  • 这不是错误,如果我单击 RecyclerView 的项目,它不会做任何事情,我曾尝试在我的 onTecniciClick 中显示敬酒,但它没有做任何事情,它就像我从来没有碰过这个项目
  • @pazz98 由 oussama-zaoui 回答的答案应该可以解决,如果你可以摆脱你的听众

标签: android listener android-adapter android-recyclerview


【解决方案1】:

您不需要在 ViewHolder 类中创建 OnTecniciListner 的实例,TecniciAdapter 中的实例应该可以正常工作。

所以你的MyViewHolder 类应该是这样的

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    public TextView nome;
    public TextView cognome;
    public TextView stato;


    public MyViewHolder(View view) {
        super(view);
        nome = view.findViewById(R.id.textNome);
        cognome = view.findViewById(R.id.textCognome);
        stato = view.findViewById(R.id.textCurrentState);
        view.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        onTecniciListner.onTecniciClick(getAdapterPosition());
    }
}

【讨论】:

  • 谢谢,不过还是不行,我好像也从来没碰过这个东西
【解决方案2】:

onBindViewHolder试试这个:

myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 2015-12-29
    • 2021-02-03
    • 1970-01-01
    • 2016-11-24
    • 2010-10-28
    • 1970-01-01
    • 2023-01-04
    • 2012-04-05
    相关资源
    最近更新 更多