问题描述
我创建了一个具有 Adapter 类的 Recycler 视图,然后我有另一个布局名称 cart 。 我想访问适配器类中购物车中存在的文本视图 我在 viewHolder 类中使用 LayoutInflater 来访问 cart.xml 中存在的 Textview 但它什么都不做 请帮忙!
itemDetailsAdapter java
package com.example.wedeliver;
import android.content.Context;
import android.graphics.Paint;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.google.android.material.snackbar.Snackbar;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
public class itemDetailsAdapter extends RecyclerView.Adapter<itemDetailsAdapter.Viewholder>
{
public Context context;
public ArrayList<itemDetails> courseModelArrayList;
long maxitems=0;
long booked_items_count=0;
View view1;
// Constructor
public itemDetailsAdapter(Context context,ArrayList<itemDetails> courseModelArrayList) {
this.context = context;
this.courseModelArrayList = courseModelArrayList;
}
@NonNull
@Override
public itemDetailsAdapter.Viewholder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
// to inflate the layout for each item of recycler view.
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_display_card,parent,false);
View view1 = LayoutInflater.from(parent.getContext()).inflate(R.layout.cart,false);
return new Viewholder(view);
}
@Override
public void onBindViewHolder(@NonNull itemDetailsAdapter.Viewholder holder,int position) {
// to set data to textview and imageview of each card layout
itemDetails itemDetails = courseModelArrayList.get(position);
//Context context = holder.product_image.getContext();
Glide.with(context).load(itemDetails.getimageView()).into(holder.product_image);
holder.discount.setText(itemDetails.getdiscount()+"% OFF");
holder.actual_price.setText(itemDetails.getActual_price());
holder.actual_price.setPaintFlags(holder.actual_price.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
holder.selling_price.setText("₹ /-"+itemDetails.getSelling_price());
holder.product_name.setText(itemDetails.getProduct_name());
holder.product_brand.setText(itemDetails.getProduct_brand());
maxitems=Long.parseLong(itemDetails.getCapacity().toString());
booked_items_count=Long.parseLong(itemDetails.getBooked_items_count().toString());
holder.add.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(booked_items_count<maxitems) {
booked_items_count++;
holder.counter.setText(""+booked_items_count);
notifyDataSetChanged();
//databaseReference1.child("booked_items_count").setValue(""+booked_items_count);
// Log.d("hello",""+booked_items_count);
}
else
{
Snackbar.make(view,"Out of stock",Snackbar.LENGTH_SHORT).show();
}
}
});
//Toast.makeText(context,"hello",Toast.LENGTH_SHORT).show();
// DatabaseReference databaseReference1=FirebaseDatabase.getInstance().getReference("Items").child("Item_"+itemDetails.getProduct_name());
// itemDetails.setBooked_items_count(""+booked_items_count);
// databaseReference1.setValue(itemDetails);
}
@Override
public int getItemCount() {
return courseModelArrayList.size();
}
public class Viewholder extends RecyclerView.ViewHolder {
public ImageView product_image;
public TextView product_name,product_brand,selling_price,actual_price,discount;
public TextView add,counter;
public Viewholder(@NonNull View itemView) {
super(itemView);
product_image=itemView.findViewById(R.id.product_img);
product_name=itemView.findViewById(R.id.product_name);
product_brand=itemView.findViewById(R.id.brand_name);
selling_price=itemView.findViewById(R.id.selling_price);
actual_price=itemView.findViewById(R.id.product_price);
add=itemView.findViewById(R.id.product_add);
//here Iam inflating the cart layout and accessing the noficationnumber1 id preset in cart
View view=LayoutInflater.from(context).inflate(R.layout.cart,null);
counter=view.findViewById(R.id.notificationNumber1) ;
discount=itemView.findViewById(R.id.discount);
}
}
}
cart.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:id="@+id/notificationIcon"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:src="@drawable/cart"/>
<androidx.cardview.widget.CardView
android:layout_width="18dp"
android:layout_height="18dp"
app:cardBackgroundColor="@color/accent"
app:layout_constraintEnd_toEndOf="@+id/notificationIcon"
app:layout_constraintTop_toTopOf="@+id/notificationIcon"
app:cardCornerRadius="50dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/notificationNumber1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:textColor="@color/white"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.545"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"></TextView>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
解决方法
错误的方式,您返回了ViewHolder(view),但是view1 没有绑定,您应该使用具有多个viewType 的适配器。 检查这个:https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#getItemViewType(int)
,首先,您应该将cart.xml 移动到包含recyclerview 的活动中。然后在 recyclerview 适配器中创建一个 onClick 侦听器接口,并在包含 cart.xml 的活动中实现它。现在,您可以通过包含 cart.xml 的活动中的接口更改计数器值。
,1) 您应该在您的适配器类中全局初始化 TextView。
TextView textView;
2) 使用 LayoutInflater 在 onCreateViewHolder() 中设置您的 cart.xml 布局并分配您的 textview Id .
// set the custom layout
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View customLayout
= inflater.inflate(
R.layout.help_support_dialog_design,null);
textView = customLayout.findViewById(R.id.txtview);
现在,您可以使用此 Textview 执行任何操作。