Не получаю никакого результата, когда я нажимаю на свой товар - PullRequest
1 голос
/ 02 июля 2019

Я использую recyclerView в своих приложениях, и когда я нажимаю на элемент, я ничего не получаю.Я попытался напечатать текст, чтобы увидеть, работает ли щелчок, но ничего.Я следовал многим учебникам, но все еще не работал.Могу ли я знать, где проблема?Мне нужно реализовать этот щелчок.

Вот мой код:

AdapterClass

public class DosAdapter extends 
RecyclerView.Adapter<DosAdapter.DosHolder>{
private List<Dossier> dossiers = new ArrayList<>();
private OnItemClickListener listener;

public interface OnItemClickListener {
    void onItemClick(int position);
}

public void setOnItemClickListener(OnItemClickListener listener) {
    this.listener = listener;
}

@NonNull
@Override
public DosAdapter.DosHolder onCreateViewHolder(@NonNull ViewGroup parent, 
int viewType)
{
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.folder_item, parent, false);
    return new DosHolder(itemView,this.listener);
}

@Override
public void onBindViewHolder(@NonNull DosAdapter.DosHolder holder, int 
position)
{
    Dossier currentDos = dossiers.get(position);
    holder.titre.setText(currentDos.getTitre());

}

public static class DosHolder extends RecyclerView.ViewHolder
{
    private TextView titre;

    public DosHolder(View itemView, OnItemClickListener listener)
    {
        super(itemView);
        titre = itemView.findViewById(R.id.text_view_titre);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION) {
                        listener.onItemClick(position);
                    }
                }
            }
        });
    }
}

}

Активность

    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    recyclerView.setHasFixedSize(true);
    recyclerView.addItemDecoration(new 
   DividerItemDecoration(getApplicationContext(), 
   DividerItemDecoration.VERTICAL));

     DosAdapter adapter = new DosAdapter();
    recyclerView.setAdapter(adapter);
    adapter.setOnItemClickListener(new DosAdapter.OnItemClickListener(){
        @Override
        public void onItemClick(int position) {
            System.out.println("clicked");
        }
    });

1 Ответ

0 голосов
/ 02 июля 2019

Вы не возражаете против этого?Я уверен, что названия совпадают с вашими, и вы можете просто скопировать весь код и вставить без каких-либо ошибок, просто убедитесь, что вы прочитали несколько комментариев, чтобы понять, а не только использовать.

ДЛЯ ВАШЕГО АДАПТЕРА

public class DosAdapter extends RecyclerView.Adapter<DosAdapter.ViewHolder> {

    private OnItemClickListener listener;
    private List<Dossier> dossiers = new ArrayList<>();

    public DosAdapter(OnItemClickListener listener, List<Dossier> dossiers) {
        this.dossiers = dossiers;
        this.listener = listener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.folder_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        try {
            final Dossier currentDos = dossiers.get(position);
            holder.titre.setText(currentDos.getTitre());

            holder.titre.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.onItemClick(position);
                }
            });

        } catch (Exception e) {
            Log.e("Exception", e.getMessage()+"");
        }
    }

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

    /*--------------------------------------------------------------------------------------
     |                          GET REFERENCES TO VIEWS HERE
     *--------------------------------------------------------------------------------------*/
    class ViewHolder extends RecyclerView.ViewHolder {
        private TextView titre;

        ViewHolder(View itemView) {
            super(itemView);
            titre = itemView.findViewById(R.id.text_view_titre);
        }
    }
}

КАК ИСПОЛЬЗОВАТЬ АДАПТЕР С ДЕЯТЕЛЬНОСТИ, КОТОРОЙ НУЖНО ЭТО.

public class MainActivity extends AppCompatActivity implements OnItemClickListener {

private DosAdapter dosAdapter;
private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<Dossier> dossiers = new ArrayList<>();
        //I'm assuming you already feed your data, so you're not passing null like me here.

        recyclerView = findViewById(R.id.recyclerView);

        dosAdapter = new DosAdapter(this, dossiers);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setHasFixedSize(true);
        recyclerView.addItemDecoration(new
                DividerItemDecoration(getApplicationContext(),
                DividerItemDecoration.VERTICAL));
        recyclerView.setAdapter(dosAdapter);
    }

    @Override
    public void onItemClick(int position) {
        System.out.println("clicked position: "+position);

        /*
        * This will help your tracing from Logcat much easy to trace,
         * simply open Logcat and switch from verbose/Debug to Error,
         * like that you will not have much logs and tracking the
         * printout becomes easier.
         * */
        Log.e("CLICK TAG", "Clicked position"+position);
    }
}

ЕслиВы не торопитесь, чтобы пройти через это, вы поймете это лучше.

...