RecyclerView 正在加载 items ,但没有滚动。 Onclick 也不起作用

RecyclerView is loading items , but not scrolling. Onclick does not work either

Recycler 视图加载项目和图像,但它不能正确滚动底部项目,当我尝试触摸滚动时,它向下拖动一点然后反弹回顶部。我在这些按钮上设置的 onlick 也不起作用。

CategoryFragemt.java

public class CategoryFragment extends Fragment {
Data data;
private List<Category> categoryList = new ArrayList<>();
private RecyclerView recyclerView;
private CategoryAdapter mAdapter;

List<Category> catlist = new ArrayList<>();

FirebaseDatabase firebaseDatabase=FirebaseDatabase.getInstance(); DatabaseReference引用=firebaseDatabase.getReference();

public CategoryFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
 //   firebaseDatabase.getInstance();
    View view = inflater.inflate(R.layout.fragment_category, container, false);
    recyclerView = view.findViewById(R.id.category_rv);
    recyclerView.setHasFixedSize(true);
    data = new Data();



    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemViewCacheSize(20);
   // recyclerView.setItemAnimator(new DefaultItemAnimator());
    getCatList();


    return view;
}


@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //you can set the title for your toolbar here for different fragments different titles
    getActivity().setTitle("Category");
}
public List<Category>  getCatList(){

    reference = FirebaseDatabase.getInstance().getReference("Category");
    reference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
                Category b = dataSnapshot1.getValue(Category.class);
                categoryList.add(b);

              //  Dialog.show();
            }
            mAdapter = new CategoryAdapter(getCatList(), getContext(), "Category");
            RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
            recyclerView.setLayoutManager(mLayoutManager);
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(mAdapter);
            mAdapter.notifyDataSetChanged();

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

    return categoryList;

}

}

CATEGORYADAPTER.jAVA

public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.MyViewHolder> {

List<Category> categoryList;
Context context;
String Tag;

public CategoryAdapter(List<Category> categoryList, Context context) {
    this.categoryList = categoryList;
    this.context = context;
}

public CategoryAdapter(List<Category> categoryList, Context context, String tag) {
    this.categoryList = categoryList;
    this.context = context;
    Tag = tag;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
    View itemView;
    if (Tag.equalsIgnoreCase("Home")) {
        itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row_home_category, parent, false);
    } else {
        itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row_category, parent, false);
    }


    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {

    Category category = categoryList.get(holder.getAdapterPosition());
    holder.title.setText(category.getTitle());
    if (Tag.equalsIgnoreCase("Category")) {

        Picasso.get()
                .load(category.getImage())
                .fit()
                .centerInside()
                .placeholder(R.drawable.cart)
                .error(R.drawable.cauliflower)
                .into(holder.imageView);

    }



    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, ProductActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            context.startActivity(intent);
            if(holder.title.getText().toString().equalsIgnoreCase("dairy")){
                Intent i = new Intent(context, ProductActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                context.startActivity(i);
            }
        }
    });

    holder.title.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(context, ProductActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            context.startActivity(intent);
        }
    });

}

@Override
public int getItemCount() {
    if (Tag.equalsIgnoreCase("Home") && categoryList.size() < 6 && categoryList.size() > 3) {
        return 3;
    } else if (Tag.equalsIgnoreCase("Home") && categoryList.size() >= 6) {
        return 6;
    } else {
        return categoryList.size();
    }

}

public class MyViewHolder extends RecyclerView.ViewHolder {
    ImageView imageView;
    TextView title;
    ProgressBar progressBar;
    CardView cardView;

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

        imageView = itemView.findViewById(R.id.category_image);
        title = itemView.findViewById(R.id.category_title);
        progressBar = itemView.findViewById(R.id.progressbar);
        cardView = itemView.findViewById(R.id.card_view);
    }
}

}

category_fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:background="@drawable/bg_3" />

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:background="@drawable/bg_2" />

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:background="@drawable/bg_1" />

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:background="@drawable/graphe" />

</RelativeLayout>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#99FFFFFF">

</RelativeLayout>


<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/category_rv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

</androidx.recyclerview.widget.RecyclerView>

row_category.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"

android:layout_height="wrap_content">

<androidx.cardview.widget.CardView
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    app:cardCornerRadius="15dp"
    app:cardElevation="4dp"
    app:cardUseCompatPadding="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp">

        <ImageView
            android:id="@+id/category_image"
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:scaleType="fitXY" />

        <ProgressBar
            android:id="@+id/progressbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true" />

        <TextView
            android:id="@+id/category_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_centerInParent="true"
            android:text="Food"
            android:textSize="18dp"
            android:textStyle="bold" />
    </RelativeLayout>
</androidx.cardview.widget.CardView>

请帮忙。我需要在几天内完成我的项目。提前谢谢你

没有时间对此进行测试,但这是我的想法。 每次 onDataChange 侦听器中的数据发生变化时,您都会设置 recyclerView 适配器,因此您会不断重置 recyclerview。 尝试从该侦听器中取出以下代码并将其放在 getCatList() 正下方的片段的 OnCreatView 中。

        mAdapter = new CategoryAdapter(getCatList(), getContext(), "Category");
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);
        mAdapter.notifyDataSetChanged();

还要检查 </RecyclerView>.
下面的末尾缺少根 </RelativeLayout> 如果只是提问时的错误请忽略
同样勾选holder.title.getText().toString()的值,根据标题提供点击功能。我认为这是导致问题的原因。
而不是 holder.title.getText().toString() 使用你给条件 category.getTitle()