Android RecyclerПросмотреть наClickListener - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно получить позицию кликаемого элемента в Android RecyclerView, которая создается во фрагменте.Так как у recyclerview нет такого слушателя, как listview, я искал и нашел некоторые методы в Интернете.Некоторые не работают, а некоторые не предоставляют значение позиции.Затем я использовал свой собственный усовершенствованный код из примеров, которые я видел, и он работал после целого дня.Теперь моя проблема заключается в том, что мне нужно знать любые недостатки этого, в том числе проблемы с производительностью.или даже лучшие способы сделать это (если это возможно).

также может кто-то помочь мне повторно использовать этот код для нескольких представлений переработчика в одном проектефункция в Java-файле фрагмента.Затем он вызывается путем создания и экземпляра фрагмента.

public void recyclerButtonClicked(int position) {
    ...
    //position will have the index value of the rows in RecyclerView.
    ...
}

Класс RecyclerButtonClick вызывается в setOnClickListener в onBindViewHolder () класса RecycleViewAdapter

public void onBindViewHolder(MyViewHolder holder, int position) {
    ...
    holder.YOUR_BUTTON.setOnClickListener(new RecyclerButtonClick(position));
    ...
}

, что очень ценится

Обновите эту ссылку на github, если хотите.https://github.com/abhinanduN/Android--RecyclerView-onClick-Listener/blob/master/README.md

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

RecyclerView не имеет setOnItemClickListener, как ListView.Если вы хотите, чтобы он щелкнул позицию элемента в Android RecyclerView, которая создается во фрагменте, выполните следующие действия, например:

  1. OnFragement.java, который содержит обзор переработчика во фрагменте:

    public class OneFragment extends Fragment {

    RecyclerView recyclerView;

    String arr[]={"Apple","Banana","Mango","Orange"};

    public static OneFragment newInstance() {

        Bundle args = new Bundle();

        OneFragment fragment = new OneFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment_one,null);

        recyclerView=view.findViewById(R.id.recyclerview);

        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity());
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);


        recyclerView.setLayoutManager(linearLayoutManager);

        MyAdapter myAdapter=new MyAdapter(getActivity(),arr);

        recyclerView.setAdapter(myAdapter);

        return view;
    }
В вашем адаптере выполните следующие действия:

    public class MyAdapter extends RecyclerView.Adapter {
    Context context;
    String array[];

    LayoutInflater layoutInflater;

    public MyAdapter(FragmentActivity activity, String[] arr) {
        context=activity;
        array=arr;

        layoutInflater=LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view=layoutInflater.inflate(R.layout.recycler_row,null);
        return new MyHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyHolder myHolder, final int i) {
          myHolder.tvName.setText(array[i]);

          //to get position after clicked on button or any UI component on row
          myHolder.btnBuy.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  Toast.makeText(context,"You have clicked item "+array[i]+" at "+i+"th position",Toast.LENGTH_SHORT).show();
              }
          });

          //to get position after clicked on one itemview or row
          myHolder.itemView.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   Toast.makeText(context,"You have clicked item at "+i+"th position",Toast.LENGTH_SHORT).show();
               }
          });
    }

    @Override
    public int getItemCount() {
        return array.length;
    }

    class MyHolder extends RecyclerView.ViewHolder
    {
        TextView tvName;
        Button btnBuy;

        public MyHolder(@NonNull View itemView) {
            super(itemView);

            tvName=itemView.findViewById(R.id.tv_fruit);
            btnBuy=itemView.findViewById(R.id.btn_buy);

        }
    }

0 голосов
/ 27 ноября 2018

Вы можете сделать что-то вроде этого. Если вы хотите получить событие щелчка вне класса, вы можете использовать интерфейс.

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

public RecyclerViewAdapter() {
}

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

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

}

@Override
public int getItemCount() {
    return 0;
}

public class RRecyclerViewHolder extends RecyclerView.ViewHolder implements View

        .OnClickListener {
    public RRecyclerViewHolder(@NonNull View itemView) {
        super(itemView);
    }

    @Override
    public void onClick(View v) {
        int selectPosition = getAdapterPosition();
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...