Java RecyclerView ViewHolder中的findViewById引发NullPointerException
我正在尝试使用RecyclerView显示数据。我不太清楚它为什么会因为NullPointerException而不断崩溃。我的理论是,它试图在视图本身被创建之前找到TextView 然而,以我的构造函数的方式,它不应该这样做 我已经做了几个小时了。任何帮助都将不胜感激 我的XML文件:Java RecyclerView ViewHolder中的findViewById引发NullPointerException,java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在尝试使用RecyclerView显示数据。我不太清楚它为什么会因为NullPointerException而不断崩溃。我的理论是,它试图在视图本身被创建之前找到TextView 然而,以我的构造函数的方式,它不应该这样做 我已经做了几个小时了。任何帮助都将不胜感激 我的XML文件: <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http:/
<?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>
RecyclerView适配器:
public class ExpenseAdapter extends RecyclerView.Adapter<ExpenseAdapter.ItemViewHolder> {
private ArrayList<Item> mExpenseList;
public static class ItemViewHolder extends RecyclerView.ViewHolder {
public TextView frag_name;
public TextView frag_price;
public TextView frag_date;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
frag_name.findViewById(R.id.recycler_name);
frag_price.findViewById(R.id.recycler_price);
frag_date.findViewById(R.id.recycler_date);
}
}
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.expense, parent, false);
ItemViewHolder viewHolder = new ItemViewHolder(v);
return viewHolder;
}
// constructor to receive list of expenses for recycler view to process
public ExpenseAdapter(ArrayList<Item> expenseList) {
mExpenseList = expenseList;
}
@Override
public void onBindViewHolder(@NonNull ItemViewHolder itemViewHolder, int i) {
Item currItem = mExpenseList.get(i);
itemViewHolder.frag_name.setText(currItem.getName());
itemViewHolder.frag_price.setText(Integer.toString(currItem.getPrice()));
itemViewHolder.frag_date.setText(currItem.getDatePurhase());
}
@Override
public int getItemCount() {
return mExpenseList.size();
}
}
在使用ItemViewHolder之前,需要在其中初始化视图。现在frag_name.findviewbydr.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);
}
frag_name.findviewbydr.id.recycler_name;-那不是怎么做的。它将是frag_name=itemView.findviewbydr.id.recycler_name;,类似地,对于others.TextView.findViewById是一个无意义的b null。。。请改为尝试itemViewHolder.findViewById。谢谢。现在我觉得问这些问题很愚蠢