【发布时间】:2017-08-11 21:56:13
【问题描述】:
我需要获取特定位置的视图,但我收到此错误:
java.lang.NullPointerException:尝试从字段中读取 'android.view.View android.support.v7.widget.RecyclerView$ViewHolder.itemView' 为空 对象引用
这是我的适配器:
public class ConciergeAdapter extends RecyclerView.Adapter<ConciergeAdapter.MyViewHolder> {
private Context context;
private ArrayList<String> items;
public class MyViewHolder extends RecyclerView.ViewHolder
{
public TextView text;
public RelativeLayout maincon;
public MyViewHolder(View view) {
super(view);
this.text = (TextView) view.findViewById(R.id.text);
this.maincon = (RelativeLayout) view.findViewById(R.id.maincon);
}
}
public ConciergeAdapter(Context context, ArrayList<String> items)
{
this.context = context;
this.items = items;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_concierge_top_items, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(ConciergeAdapter.MyViewHolder holder, int position)
{
Random rnd = new Random();
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
holder.maincon.setBackgroundColor(color);
}
@Override
public int getItemCount() {
return items.size();
}
}
这是我调用适配器并尝试获取 ViewHolder 的代码:
final LinearLayoutManager layoutManager= new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL, false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(layoutManager);
ArrayList<String> itemslist = new ArrayList<String>();
itemslist.add("1");
itemslist.add("1");
itemslist.add("1");
itemslist.add("1");
itemslist.add("1");
itemslist.add("1");
itemslist.add("1");
itemslist.add("1");
itemslist.add("1");
itemslist.add("1");
itemslist.add("1");
ConciergeAdapter adapter = new ConciergeAdapter(getActivity(),itemslist);
mRecyclerView.setAdapter(adapter);
//RecyclerView.ViewHolder viewholder = mRecyclerView.findViewHolderForAdapterPosition(1);
View holder = layoutManager.getChildAt(0);
RelativeLayout middle = (RelativeLayout) holder.findViewById(R.id.maincon);
middle.getLayoutParams().height = 200;
【问题讨论】:
-
这不是同一个问题。他的问题是 swapAdapter
-
@student 他使用swapAdapter,你使用setAdapter,但是底层的工作实际上是相同的,并且你没有通知你的数据集已经改变。我想你会发现,如果你仔细研究这个问题,它会解决你的问题。
-
@student 你解决了吗?
标签: java android nullpointerexception android-recyclerview