Навигация между фрагментами из адаптера с помощью интерфейса - PullRequest
0 голосов
/ 25 апреля 2020

У меня проблема с фрагментами. В первом фрагменте у меня есть обзор переработчика, и когда я нажимаю на элемент, он переходит к другому фрагменту. Я определил интерфейс для этой цели, но он не работает. Вот что у меня в адаптере:

private List<KategoriteNested> kategoriteNested;
    private Context mContext;

    private static OnItemCLickListener mOnItemCLickListener;

    public void setOnItemCLickListener(OnItemCLickListener onItemCLickListener) {
        mOnItemCLickListener = onItemCLickListener;
    }

    public AllCategoriesAdapter(List<KategoriteNested> kategoriteNested, Context mContext) {
        this.kategoriteNested = kategoriteNested;
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public AllCategoriesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View mView = LayoutInflater.from(mContext)
                .inflate(R.layout.all_categories_item, parent, false);
        return new AllCategoriesAdapter.AllCategoriesViewHolder(mView);
    }

    @Override
    public void onBindViewHolder(@NonNull AllCategoriesViewHolder holder, int position) {
        KategoriteNested mKategoriteNested = kategoriteNested.get(position);
        String categoryEmertimi = mKategoriteNested.getKategoria().getName();
        holder.categoryEmertimi.setText(categoryEmertimi);

        holder.itemView.setOnClickListener(v -> {
            int index = holder.getAdapterPosition();
            mOnItemCLickListener.OnItemClick(index);
        });

    }

    public interface OnItemCLickListener{
        void OnItemClick(int position);
    }

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

    public static class AllCategoriesViewHolder extends RecyclerView.ViewHolder {

        TextView categoryEmertimi;

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

            categoryEmertimi = itemView.findViewById(R.id.category_emertimi);
        }
    }

Я получаю позицию элемента с помощью getAdapterPosition (). И в моем фрагменте у меня есть это:

private void goToCategoriesFragment() {
        allCategoriesAdapter = new AllCategoriesAdapter(kategoriteNested, getContext());
        allCategoriesAdapter.setOnItemCLickListener(position -> {
            if (mOnItemCLickListener != null) {
                Fragment fragment = new CategoriesDetailsFragment();
                assert getFragmentManager() != null;
                FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.container, fragment);
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();
            }
        });
    }

Я нажимаю на элемент, и ничего не происходит, я также не получаю сообщение об ошибке в logcat. Интересно, правильно ли я осуществляю связь между фрагментом и адаптером, используя интерфейс, или я что-то упускаю. Может ли кто-нибудь дать мне объяснение, как можно перемещаться между фрагментами, используя обзор переработчика. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 апреля 2020

Сделайте так, чтобы ваш фрагмент реализовывал интерфейс OnItemCLickListener, также внесите некоторые изменения в ваш адаптер constructor, чтобы вы передавали список, контекст и OnItemCLickListener экземпляр в нем. Затем заставьте ваш ViewHolders реализовать тот же интерфейс и передать тот экземпляр, который вы получили через конструктор адаптера, в viewHolder.

...