android.widget.LinearLayout 无法在 com.example.foodorderapp.Adapters.OrdersAdapter$viewHolder.<init> 上转换为 android.widget.TextView

android.widget.LinearLayout cannot be cast to android.widget.TextView at com.example.foodorderapp.Adapters.OrdersAdapter$viewHolder.<init>

我试图在调试时解决这个错误,但找不到解决方案 源代码 Link: Download


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);

        }
    }


}

当我尝试 运行 应用程序正常工作但具体在这 Activity 他们没有任何错误但应用程序不能 运行 & 当我调试应用程序然后我得到这个错误java.lang.ClassCastException: android.widget.LinearLayout 无法转换为 android.widget.TextView

源码Link: Download

从 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">

答案在这个post的error/title中。

问题:

它说 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 中删除 ID orderItemName 并将其分配给相应的 TextView.

而且,您的应用程序将正常运行。