Как я могу исправить мою проблему с RecyclerView и OnClickAdapter? - PullRequest
0 голосов
/ 20 марта 2020

Извините, у меня проблема, я создал рекламный адаптер для 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);
}

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

в onBindViewHolder попробуйте это:

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

        }
    });
0 голосов
/ 21 марта 2020

Вам не нужно создавать экземпляр OnTecniciListner в вашем классе ViewHolder, тот в 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());
    }
}

...