如何获取Recyclerview特定项目的ViewHolder

时间:2016-11-15 04:33:56

标签: java android android-recyclerview recycler-adapter

有没有办法让reclerview的特定项目的ViewHolder仅基于给定的位置?

类似于getViewHolder(position);

public MyViewHolder getViewHolder(int position){
    MyViewHolder holder = null;
    /**
        Find ViewHolder here...
            If Found initialize the holder..
                holder = ?
    **/
    return holder;
}

此功能在我的Adapter类中,我正在寻找获取项目的ViewHolder的方法,以便我可以更改我的自定义项{{1}的一个视图的值},我有股票,我无法找到办法,我试图搜索,但没有一个能帮助我。

任何?

4 个答案:

答案 0 :(得分:1)

这不是ViewHolder的工作原理。 ViewHolder只是您所做的布局的持有者。 ViewHolder可以自动重复使用,所以如果你有100个项目,android将不会创建100个ViewHolders,而只是创建一些在屏幕上可见的ViewHolders。如果滚动RecyclerView,将重新使用不可见项目的ViewHolder。您只需要更改在方法onBindViewHolder

上自动传递的ViewHolder上的数据

以下是示例

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    holder.textViewTitle.setText(data.get(position).title);
    holder.textViewContent.setText(data.get(position).content);

    Context context = holder.button.getContext();    
    holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, "you clicked the button!", Toast.LENGTH_SHORT).show();
        }
    });
}

编辑:为了更清楚,您应该做的是更改适配器中的特定数据,例如,您可以在适配器中创建一个方法,如下所示

public void changeItem(int position, ItemModel newItemModel){
    mItemModelList.remove(position);
    mItemModelList.add(position, newItemModel);
}

然后调用适配器的notifyItemChanged(int position)

答案 1 :(得分:1)

if (your_recyclerview != null) {
        val viewholder = your_recyclerview .findViewHolderForAdapterPosition(your positions)
        if (viewholder != null){
            adapter.pausePlayer(viewholder as FeedPostDetailCommentAdapter.FeedDetailViewHolder)
        }
    }

答案 2 :(得分:0)

public static RecyclerView.ViewHolder getViewHolder(View view) {
    RecyclerView rv = getParentRecyclerView(view);
    View rvChild = getParentViewHolderItemView(view);

    if (rv != null && rvChild != null) {
        return rv.getChildViewHolder(rvChild);
    } else {
        return null;
    }
}

我希望它会对你有所帮助。 供您参考,您也可以访问此链接。

http://www.programcreek.com/java-api-examples/index.php?class=android.support.v7.widget.RecyclerView&method=getChildViewHolder

答案 3 :(得分:0)

简单的答案是

但是,强制创建 ViewHolder 所需付出的代价是,以编程方式滚动到所需位置,然后通过自定义滚动侦听器传递的回调捕获该位置。

应该花大约10分钟的时间来实现我对similar question的回答中所述的代码。