簡體   English   中英

java.lang.NullPointerException:嘗試從Viewholder訪問textview時

[英]java.lang.NullPointerException: while try accessing textview from viewholder

我有一個自定義的RecycleView並且能夠成功在RecycleView顯示數據。 現在,我想從自定義布局訪問文本視圖,以便在我的代碼的后面部分進行更改。 我提供了布局, RecycleView適配器和我嘗試訪問TextView 但是我得到NullPointerException與視圖為空。 如何在主要活動中從Mylayout.xml訪問textview((R.id.zb),以修改RecycleView項目?

我的布局:

<android.support.v7.widget.CardView android:id="@+id/card_view1"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardBackgroundColor="@color/cardview_light_background"
card_view:cardCornerRadius="5dp"
card_view:cardUseCompatPadding="true"
xmlns:android="http://schemas.android.com/apk/res/android">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="3"
    android:orientation="horizontal"
    android:id="@+id/z">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Z "
        style="@style/Base.TextAppearance.AppCompat.Large.Inverse"
        android:layout_weight="1"
        android:textColor="@color/colorPrimary"
        android:gravity="center"
        android:id="@+id/zn"/>

    <TextView
        android:id="@+id/zb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="buy"
        android:textColor="#333"
        style="@style/Base.TextAppearance.AppCompat.Medium.Inverse"/>

    <TextView
        android:id="@+id/zs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Sell"
        android:textColor="#333"
        style="@style/Base.TextAppearance.AppCompat.Medium.Inverse"/>

</LinearLayout>

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

RecycleView適配器:

public class Adapter extends RecyclerView.Adapter<Adapter.Viewholder> {

private List<dispitems> m;


@NonNull
@Override
public Adapter.Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.list1, parent, false);
    return new Viewholder(itemView);
}

@Override
public void onBindViewHolder(@NonNull Adapter.Viewholder holder, int position) {
    dispitems d = m.get(position);
    holder.zb.setText(d.getZb());
    holder.zs.setText(d.getZs());
    holder.zn.setText(d.getZn());
 }

@Override
public int getItemCount() {
    return m.size();

}

Adapter(List<dispitems> m) {
    this.m = m;
}


public class Viewholder extends RecyclerView.ViewHolder {
    public TextView zb,zs,zn;

    Viewholder(View itemView) {
        super(itemView);
        zn = (TextView) itemView.findViewById(R.id.zn);
        zb = (TextView) itemView.findViewById(R.id.zb);
        zs = (TextView) itemView.findViewById(R.id.zs);

    }
}
}

我嘗試了以下選項,但它顯示了空指針異常

Adapter.Viewholder row = (Adapter.Viewholder) recyclerView.findViewHolderForAdapterPosition(getCategoryPos(device));

row.zs.setTextColor(ContextCompat.getColor(this, R.color.colorAccent));

我收到以下異常。

   java.lang.NullPointerException: Attempt to read from field 'android.widget.TextView cti.cryptotrackerindia.Adapter$Viewholder.zsell' on a null object reference

也嘗試了以下

 View row = recyclerView.getLayoutManager().getChildAt(getCategoryPos(device));

也許我沒有得到這個問題,但是在放大視圖之后,您應該能夠在onCreateViewHolder上獲取textview。

public Adapter.Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
        .inflate(R.layout.list1, parent, false);
    TextView txtView = (TextView )itemView.findViewById(R.id.zb);
    return new Viewholder(itemView);
}

然后將其作為成員存儲在適配器中。

如果要更新RecyclerView中顯示的數據,則應使用notifyItemChanged(position, payload)來執行ViewHolder部分重新綁定。

不修改引用的數據而直接修改ViewHolder布局可能會導致顯示的視圖出現差異,尤其是當您開始滾動列表並且ViewHolder的對象開始被回收再用於其他項目時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM