с ошибкой onitemclick в представлении переработчика - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь сделать элементы в обзоре переработчиков кликабельными. Я думаю, что я все сделал правильно в классе адаптера, но в домашнем фрагменте я получаю подчеркнутый [getActivity (), mCategory] cAdapter = new CategoryAdapter(getActivity(), mCategory); Ниже приведен класс адаптера

public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.ImageViewHolder> {
    private Context pContext;
    private List<Category> mCategory;
    private OnItemClickListener conItemClickListener;

    public CategoryAdapter(Context pContext, List<Category> mCategory,OnItemClickListener onItemClickListener) {
        this.pContext = pContext;
        this.mCategory = mCategory;
        this.conItemClickListener = onItemClickListener;
    }

    public CategoryAdapter(ArrayList<Category> mCategory, OnItemClickListener onItemClickListener) {
        this.mCategory = mCategory;
        this.conItemClickListener = onItemClickListener;
    }

    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        View v = inflater.inflate(R.layout.category_item, parent, false);
        return new ImageViewHolder(v, conItemClickListener);
    }

    @Override
    public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
        Category categoryCur = mCategory.get(position);
        holder.cattitle.setText(categoryCur.getCatname());
        holder.cattitle.setBackgroundColor(Color.parseColor(categoryCur.getCatbg()));
        holder.iconWrapper.setBackgroundColor(Color.parseColor(categoryCur.getCatbg()));
        Picasso.get()
                .load(categoryCur.getCaticon())
                .placeholder(R.drawable.img_placeholder)
                .fit()
                .centerCrop()
               .into(holder.imgicon);
  }
    @Override
    public int getItemCount() {
        return mCategory.size();
    }

    class ImageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView cattitle;
        ImageView imgicon;
        LinearLayout iconWrapper;
        OnItemClickListener itemClickListener;

        ImageViewHolder(@NonNull View itemView, OnItemClickListener itemClickListener) {
            super(itemView);
            cattitle = itemView.findViewById(R.id.cattName);
            imgicon = itemView.findViewById(R.id.catIcon);
            iconWrapper = itemView.findViewById(R.id.iconWrapper);
            this.itemClickListener = itemClickListener;
            itemView.setOnClickListener(this);
        }
        @Override
        public void onClick(View v) {
            itemClickListener.onItemClick(getAdapterPosition());
        }
    }

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

И мой фрагмент Home приведен ниже

public class HomeFragment extends Fragment implements CategoryAdapter.OnItemClickListener {
    private ViewPager mViewTop;
    private TabLayout mTabLayout;
    private static final int[] mResources = {
            R.drawable.axs,
            R.drawable.banner,
            R.drawable.e,
            R.drawable.unnamed,
            R.drawable.w,
            R.drawable.women,
            R.drawable.tes,
            R.drawable.qww,
            R.drawable.dribbble
    };
    private int count = 0;
    private RecyclerView nRecycleView, cRecyclerView;
    private PopularAdapter nAdapter;
    private CategoryAdapter cAdapter;
    private ArrayList<Category> mCategory;
    private List<Popular> mPopular;
    private DatabaseReference dbRef;
    private DatabaseReference logReference;
    private FirebaseAuth firebaseAuth;
    private FirebaseUser firebaseUser;

    public HomeFragment() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        mViewTop = view.findViewById(R.id.imgBanner);
        cRecyclerView = view.findViewById(R.id.category_view);
        nRecycleView = view.findViewById(R.id.recycler_view);
        loadEntries();
        cAdapter = new CategoryAdapter(mCategory,this);
        cRecyclerView.setAdapter(cAdapter);
        nAdapter = new PopularAdapter(mPopular);
        nRecycleView.setAdapter(nAdapter);
        nRecycleView.setHasFixedSize(true);
        nRecycleView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false));

        RecyclerView.LayoutManager cLayoutmanager = new GridLayoutManager(getActivity(), 2);
        cRecyclerView.setLayoutManager(cLayoutmanager);



        mViewTop.setAdapter(new TopPagerAdapter(getContext()));
        TabLayout tabLayout = view.findViewById(R.id.tabDots);
        tabLayout.setupWithViewPager(mViewTop, true);
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (count < 9) {
                            mViewTop.setCurrentItem(count);
                            count++;
                        } else {
                            count = 0;
                            mViewTop.setCurrentItem(count);
                        }
                    }
                });
            }
        }, 500, 3000);

        getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        return view;
    }
   private void loadEntries() {
       mCategory = new ArrayList<>();
       dbRef = FirebaseDatabase.getInstance().getReference("Category");
       dbRef.addValueEventListener(new ValueEventListener() {
           @Override
           public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
               for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                   Category category = postSnapshot.getValue(Category.class);
                   mCategory.add(category);
               }
               cAdapter = new CategoryAdapter(getActivity(), mCategory);
               cRecyclerView.setAdapter(cAdapter);
           }
           @Override
           public void onCancelled(@NonNull DatabaseError databaseError) {
               Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_LONG).show();
           }
       });
       mPopular = new ArrayList<>();
       dbRef = FirebaseDatabase.getInstance().getReference("popular");
       dbRef.addValueEventListener(new ValueEventListener() {
           @Override
           public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
               for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                   Popular popular = postSnapshot.getValue(Popular.class);
                   mPopular.add(popular);
               }
               nAdapter = new PopularAdapter(getActivity(), mPopular);
               nRecycleView.setAdapter(nAdapter);
           }
           @Override
           public void onCancelled(@NonNull DatabaseError databaseError) {
               Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_LONG).show();
           }
       });
   }
    @Override
    public void onItemClick(int position) {
        Intent i = new Intent (getActivity(), SettingsActivity.class);
    }
    class TopPagerAdapter extends PagerAdapter {
        Context mContext;
        LayoutInflater mLayoutInflater;
        TopPagerAdapter(Context context) {
            mContext = context;
            mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return mResources.length;
        }
        @Override
        public boolean isViewFromObject(@NotNull View view, @NotNull Object object) {
            return view == ((LinearLayout) object);
        }
        @NotNull
        @Override
        public Object instantiateItem(@NotNull ViewGroup container, int position) {
            View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false);

            ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
            imageView.setImageResource(mResources[position]);

            container.addView(itemView);

            return itemView;
        }

        @Override
        public void destroyItem(@NotNull ViewGroup container, int position, @NotNull Object object) {
            container.removeView((LinearLayout) object);
        }
    }

}

Эта ошибка вызвала большой спор и действительно нуждается в большой помощи.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Если я правильно понял, вы хотите сделать его кликабельным. Используйте интерфейс, чтобы вы могли go везде.

попробуйте что-то подобное в вашем адаптере

приватный OnItemClickListener mListener;

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

publi c ExampleViewHolder (@NonNull View itemView) {...

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               ....

                    }
                }
            }
        });

И реализовать интерфейс в Activity

0 голосов
/ 28 января 2020

Вы уже установили адаптер в onCreateView.

 cAdapter = new CategoryAdapter(mCategory,this)

теперь в записях загрузки не делайте этого

cAdapter = new CategoryAdapter(getActivity(), mCategory);
               cRecyclerView.setAdapter(cAdapter);

замените эти две строки на

cAdapter.notifyDataSetChanged();

, если вы хотите просто удалить ошибку, передав фрагмент, как это, но это плохая практика.

cAdapter = new CategoryAdapter(HomeFragment.this, mCategory);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...