我有自定义RecycleView
,我可以成功显示RecycleView
中的数据。现在,我想从自定义布局访问文本视图,以便在我的代码的后续部分进行更改。我提供了布局RecycleView
适配器以及我尝试访问TextView
的方法。但是我得到NullPointerException
,视图为null。如何在我的主要活动中从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));
答案 0 :(得分:0)
也许我没有得到问题,但是你应该能够在夸大视图后在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);
}
然后将其存储为适配器中的成员。
答案 1 :(得分:0)
如果要更新RecyclerView中显示的数据,则应使用notifyItemChanged(position, payload)
执行ViewHolder
的部分重新绑定。
直接修改ViewHolder
的布局而不引用所表示的数据会导致显示的视图出现差异,尤其是当您开始滚动列表并且ViewHolder
开始被回收并重新用于其他项目时。