gpt4 book ai didi

java - 获取特定位置的 ViewHolder - RecyclerView

转载 作者:行者123 更新时间:2023-12-02 03:17:35 24 4
gpt4 key购买 nike

我需要获取特定位置的 View 持有者,但出现此错误:

java.lang.NullPointerException: Attempt to read from field 'android.view.View android.support.v7.widget.RecyclerView$ViewHolder.itemView' on a null object reference

这是我的适配器:

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;

最佳答案

发生这种情况是因为 RecyclerView 尚未填充。我建议您在适配器的 onBindViewHolder 内执行预期的布局操作:

 @Override
public void onBindViewHolder(ConciergeAdapter.MyViewHolder holder, int position) {
if (position == 0) {
RelativeLayout middle = (RelativeLayout) holder.container(R.id.maincon);
middle.getLayoutParams().height = 200;
}

Random rnd = new Random();
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
holder.maincon.setBackgroundColor(color);
}

您的MyViewHolder:

public class MyViewHolder extends RecyclerView.ViewHolder {
public View container;
public TextView text;
public RelativeLayout maincon;

public MyViewHolder(View view) {
super(view);
container = view;
this.text = (TextView) view.findViewById(R.id.text);
this.maincon = (RelativeLayout) view.findViewById(R.id.maincon);
}
}

关于java - 获取特定位置的 ViewHolder - RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42906699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com