gpt4 book ai didi

android - 如何获取特定项目的 RecyclerView View ?

转载 作者:行者123 更新时间:2023-12-04 11:56:10 30 4
gpt4 key购买 nike

实际上我想查看 RecyclerView 中的特定项目在我的fragment.class .为此,我尝试设置 getter在我的adapter然后类尝试在我的 fragment 中访问它但我无法访问意见。

适配器类代码:

private List<ViewHolder> holder_list=new ArrayList<>();
@Override
public void onBindViewHolder(ViewHolder holder, int position) {

holder_list.add(holder);
}
public ViewHolder getViewHolder(int position){
return holder_list.get(position);
}

fragment 代码:
MessageAdapter.ViewHolder holder= msgAdp.getViewHolder(msgAdp.getItemCount()-1);
//Here holder.mMessageView is a text view
Toast.makeText(ctx,holder.mMessageView.getText().toString(),Toast.LENGTH_SHORT).show();

最佳答案

这是最简单的方法

如果您想获取项目的 ViewHolder。

RecyclerView.ViewHolder viewHolder = rvList.getChildViewHolder(rvList.getChildAt(0));

或者,如果您想获取项目的 View 对象。
View view = rvList.getChildAt(0);

使用你需要的那个。您可以获取 View 或 ViewHolder。您可以根据需要操纵它们。

编辑:

getChildAt 方法是可靠的,因为我有时也会遇到问题,可能还没有修复。

您可以使用此代码
RecyclerView.ViewHolder holder = (RecyclerView.ViewHolder)
recyclerView.findViewHolderForAdapterPosition(position);
if (null != holder) {
holder.itemView.findViewById(R.id.xyz).setVisibility(View.VISIBLE);
}

编辑 2:注

这是一个已知问题,如果您在设置列表后立即调用 findViewHolderForAdapterPosition,则会得到 NullPointerException。

if notifyDataSetChanged() has been called but the new layout has not been calculated yet, this method will return null since the new positions of views are unknown until the layout is calculated.



link

为了解决这个问题,你可以这样做。
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
RecyclerView.ViewHolder holder = (RecyclerView.ViewHolder)
recyclerView.findViewHolderForAdapterPosition(position);
if (null != holder) {
holder.itemView.findViewById(R.id.xyz).setVisibility(View.VISIBLE);
}
}
}, 50);

关于android - 如何获取特定项目的 RecyclerView View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843839/

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