我正在尝试使recyclerview中的项目可点击。我认为我在适配器类中所做的一切都正确,但是在主片段中,我得到了[{getActivity(),mCategory]下划线cAdapter = new CategoryAdapter(getActivity(), mCategory);
下面是Adapter类
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);
}
}
下面是我的主页片段
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);
}
}
}
此错误造成了很大的挫折,并且确实需要大力的帮助。
答案 0 :(得分:0)
您已经在onCreateView中设置了适配器。
cAdapter = new CategoryAdapter(mCategory,this)
现在在加载条目中不要这样做
cAdapter = new CategoryAdapter(getActivity(), mCategory);
cRecyclerView.setAdapter(cAdapter);
用
替换这两行cAdapter.notifyDataSetChanged();
如果您要删除只是错误的通行片段,就像这样,但这是不正确的做法。
cAdapter = new CategoryAdapter(HomeFragment.this, mCategory);
答案 1 :(得分:0)
如果我对它的理解正确,则希望使其可单击。使用界面,因此您可以无所不在。
在您的适配器中尝试类似的操作
私有OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(int position);
}
public ExampleViewHolder(@NonNull View itemView){ ...
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
....
}
}
}
});
并在Activity中实现接口