RecyclerView ViewHolder中的findViewById抛出NullPointerExcpetion

时间:2019-01-17 19:21:51

标签: java android android-recyclerview

我正在尝试使用@poi = Poi.new(poi_params) respond_to do |format| if @poi.save format.html { redirect_to @poi, notice: 'Poi was successfully created.' } format.json { render :show, status: :created, location: @poi } else format.html { render :new } format.json { render json: @poi.errors, status: :unprocessable_entity } end end 显示数据。我不太确定为什么它会继续以RecyclerView崩溃。我的理论是,它试图在创建视图本身之前找到NullPointerException

但是,按照我的构造函数的方式,它不应该那样做。

现在已经呆了几个小时。任何帮助将不胜感激。

我的XML文件:

TextView

RecyclerView适配器:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        >

        <TextView
            android:id="@+id/recycler_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="name"
            android:textColor="@color/icons" />

        <TextView
            android:id="@+id/recycler_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="18dp"
            android:text="price"
            android:textColor="@color/icons"
            android:textStyle="bold"/>
        <TextView
            android:id="@+id/recycler_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="date"
            android:layout_below="@+id/recycler_name"
            android:textColor="@color/icons"
            android:textStyle="italic"
            android:paddingTop="3dp"
            />

    </RelativeLayout>
</android.support.v7.widget.CardView>

1 个答案:

答案 0 :(得分:0)

您需要先在ItemViewHolder中初始化视图,然后才能使用它们。现在,frag_name.findViewById(R.id.recycler_name)将抛出NullPointerException,导致您尝试对findViewById()使用错误的视图。

使用此代码:

public ItemViewHolder(@NonNull View itemView) {
        super(itemView);
        frag_name = itemView.findViewById(R.id.recycler_name);
        frag_price = itemView.findViewById(R.id.recycler_price);
        frag_date = itemView.findViewById(R.id.recycler_date);
    }