如何解决RecyclerView正在加载项目,但不会滚动 Onclick也不起作用
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 reference = 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,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();
,
还要检查</RelativeLayout>
下方的根</RecyclerView>
是否丢失。
发布问题时忽略是否只是一个错误。
还要检查值holder.title.getText().toString()
并根据标题提供单击功能。我认为是造成问题的原因。
您可以将条件设为holder.title.getText().toString()
category.getTitle()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。