![](/img/trans.png)
[英]java.lang.NullPointerException error while accessing method from array
[英]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.