我试图解决这个Bug在调试,但无法找到它的解决方案源代码链接:下载
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.foodorderapp.Models.OrdersModel;
import com.example.foodorderapp.R;
import java.util.ArrayList;
public class OrdersAdapter extends RecyclerView.Adapter<OrdersAdapter.viewHolder>
{
ArrayList<OrdersModel> list;
Context context;
public OrdersAdapter(ArrayList<OrdersModel> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view= LayoutInflater.from(context).inflate(R.layout.order_sample,parent,false);
return new viewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull viewHolder holder, int position) {
final OrdersModel model=list.get(position);
holder.orderImage.setImageResource(model.getOrderImage());
holder.soldItemName.setText(model.getSoldItemName());
holder.orderNumber.setText(model.getOrderNumber());
holder.price.setText(model.getPrice());
}
@Override
public int getItemCount()
{
return list.size();
}
public class viewHolder extends RecyclerView.ViewHolder {
ImageView orderImage;
TextView soldItemName,orderNumber,price;
public viewHolder(@NonNull View itemView) {
super(itemView);
orderImage=itemView.findViewById(R.id.orderImage);
soldItemName=itemView.findViewById(R.id.orderItemName);
orderNumber=itemView.findViewById(R.id.orderNumber);
price=itemView.findViewById(R.id.orderPrice);
}
}
}
当我尝试运行应用程序工作正常,但具体在这个活动他们没有任何错误,但应用程序不能运行&当我调试应用程序,然后我得到这个错误java.lang.ClassCastException: android.widget.LinearLayout不能被转换为android.widget.TextView
源代码链接:下载
答案在这篇文章的错误/标题中。
问题:
它说LinearLayout
不能被转换为TextView
,这意味着在你的代码的某个地方,你试图使用并将LinearLayout
转换为TextView
,这本质上是错误的,因为LinearLayout
不能使用TextView
。
原因:
这是你在order_sample.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/orderItemName"
...>
...
</LinearLayout>
您已经给这个LinearLayout
一个名为orderItemName
的id。
但是,在适配器的viewHolder
中,您试图将此LinearLayout
设置为TextView
:
TextView soldItemName;
...
soldItemName=itemView.findViewById(R.id.orderItemName);
解决方案:
从LinearLayout
中删除idorderItemName
,并将其分配给相应的TextView
。
然后,你的应用程序就可以工作了。
从Linearlayout中删除ID并添加到您的textview-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
**android:id="@+id/orderItemName"** //REMOVE THIS and add to your TEXTVIEW
android:layout_width="match_parent"
android:layout_height="120dp"
android:orientation="vertical"
android:padding="1dp">