#android #activity #recyclerview #adapter #cardview
у меня один адаптер и два активити. И хочу чтоб в каждом из этих активити отображались разные переходы по клику на item. itemHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(context, EventActivity.class); intent.putExtra("event_id", item.event.getId()); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { context.startActivity(intent); ((Activity)context).overridePendingTransition(R.anim.slide_in_from_right, R.anim.push_to_back); } else { Pairp1 = Pair.create((View) itemHolder.mTitleView, "event_title"); Pair p2 = Pair.create((View) itemHolder.mInterestViewColor, "event_interest_bg"); Pair p3 = Pair.create((View) itemHolder.mImageView, "ivent_image"); Pair p4 = Pair.create((View) itemHolder.mInterestTitle, "event_interest_name"); ActivityOptionsCompat options = ActivityOptionsCompat. makeSceneTransitionAnimation((Activity) context, p1, p2, p3, p4); context.startActivity(intent, options.toBundle()); } } }); Как сделать выбор, если он находится в активити1, то по нажатию на item, переходит на одну страницу, если находится в активти2, то по нажатию на этот Же item, но в другую страницу. Item это отдельный layout, для recyclerview.
Ответы
Ответ 1
В данном случае проще и архитектурно правильно прокинуть интерфейс из адаптера и регистрировать его в вызывающей активити, чем вешать действия слушателей прямо в адаптере. Данный подход позволит реализовать любую уникальную логику по клику в каждой вызывающей активити, без всяких костылей и нагромождения вариантов переходов в кликере адаптера. Примерный код (исключены все методы не относящиеся к реализации): class SomeAdapter extends RecyclerView.Adapter{ interface OnCardClickListener { void onCardClick(View view, int position, boolean isValid); } private static OnCardClickListener mListener; public void setOnCardClickListener(OnCardClickListener listener) { mListener = listener; } public static class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ CardView mCard; public ItemHolder(View v) { super(v); mCard = (CardView) v.findViewById(R.id.bell_card); mCard.setOnClickListener(this); } @Override public void onClick(View v) { int position = getAdapterPosition(); boolean isValid = (position != RecyclerView.NO_POSITION); mListener.onCardClick(v, position, isValid); } } } Далее в активити используем так: public class SomeActivity extends Activity implements SomeAdapter.OnCardClickListener { RecyclerView mList; SomeAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mList = (RecyclerView) findViewById(R.id.list); mList.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new SomeAdapter(mData); mAdapter.setOnCardClickListener(this); mList.setAdapter(mAdapter); } @Override public void onCardClick(View view,final int position, boolean isValid) { if (isValid) { switch (view.getId()) { case R.id.button1: return true; default: return false; } } } } В каждой активити может быть своя реализация действий в переопределенном методе onCardClick(). Колбэк передает в активити View, по которому кликнули, позицию в адаптере и признак валидности этой позиции. Вы можете передавать из адаптера и другие произвольные данные, которые вам могут требоваться.
Комментариев нет:
Отправить комментарий