@007hrist

Как использовать один адаптер для нескольких фрагментов RecyclerView?

Здравствуйте. Есть адаптер, который используют несколько фрагментов с RecyclerView. Я сначало для одного фрагмента сделал через интерфейсы слушатель нажатия на итем и передача позиции в активити. Но теперь тестирую на остальных фрагментах и в активити передаеться позиция с первого фрагмента. Как сделать чтобы при клике адаптер понимал что это за фрагмент и брал позицию именно с активного фрагмента? Или правильнее будет использовать один фрагмент и менять данные в адаптее?

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

public CustomAdapter() {

}

public interface OnRecyclerVewItemClickListener {
    void OnClickRecyclerVewItem(int k);
}

public interface OnInWorkVewItemClickListener {
    void OnClickInWorkVewItem(int k);
}


private static final String TAG = "ррр";

static private OnRecyclerVewItemClickListener mClickListener;
static private OnInWorkVewItemClickListener mClickListener2;

public CustomAdapter(OnRecyclerVewItemClickListener clickListener){
    mClickListener = clickListener;
}

public CustomAdapter(OnInWorkVewItemClickListener clickListener2){
    mClickListener2 = clickListener2;
}





//private String[] mDataSet;

private ArrayList<Event> mDataSet;


// BEGIN_INCLUDE(recyclerViewSampleViewHolder)
/**
 * Provide a reference to the type of views that you are using (custom ViewHolder)
 */
public static class ViewHolder extends RecyclerView.ViewHolder {
    private final TextView textView, textView2, textView3, textView5, textView6, fDataTextVew, lDataTextVew;

    public ViewHolder(View v) {
        super(v);
        // Define click listener for the ViewHolder's View.
        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(mClickListener != null){
                    mClickListener.OnClickRecyclerVewItem(getAdapterPosition());
                    android.util.Log.i(TAG, "Element " + getAdapterPosition() + " clicked.");
                }

                if(mClickListener2 != null){
                    mClickListener2.OnClickInWorkVewItem(getAdapterPosition());
                    android.util.Log.i(TAG, "Element " + getAdapterPosition() + " clicked.");
                }
            }
        });

        textView = (TextView) v.findViewById(R.id.textView);
        textView2 = (TextView) v.findViewById(R.id.textView2);
        textView3 = (TextView) v.findViewById(R.id.textView3);
        textView5 = (TextView) v.findViewById(R.id.textView5);
        fDataTextVew = (TextView) v.findViewById(R.id.fDataTextVew);
        lDataTextVew = (TextView) v.findViewById(R.id.lDataTextVew);
        textView6 = (TextView) v.findViewById(R.id.textView5);
    }

    public TextView getTextView() {
        return textView;
    }
}

public CustomAdapter(ArrayList<Event> dataSet) {
    this.mDataSet = dataSet;
}

public ArrayList<Event> getData(){
    if(mDataSet == null){
        mDataSet = new ArrayList<Event>();
    }
    return mDataSet;
}

public void setData(ArrayList<Event> dataSet){
    mDataSet = dataSet;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
  
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.text_row_item, viewGroup, false);

    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
    Log.d(TAG, "Element " + position + " set.");

    ....................................
}

@Override
public int getItemCount() {
    return mDataSet.size();
}
}
  • Вопрос задан
  • 336 просмотров
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Нужно в каждом фрагменте использовать свой инстанс адаптера и сделать листенеры не статик.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы