簡體   English   中英

如何獲取Recyclerview特定Item的ViewHolder

[英]How to get ViewHolder of specific Item of Recyclerview

有沒有辦法僅根據給定位置獲取ViewHolder的特定項的ViewHolder

類似於getViewHolder(position); .

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

此函數在我的 Adapter 類中,我正在尋找一種獲取項目的ViewHolder的方法,以便我可以更改自定義項目的一個視圖的值, eg. holder.setText("Hello World"); eg. holder.setText("Hello World"); ,我是股票,我找不到辦法做到這一點,我試圖搜索但沒有人幫助我。

有人嗎?

這不是 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)

if (your_recyclerview != null) {
        val viewholder = your_recyclerview .findViewHolderForAdapterPosition(your positions)
        if (viewholder != null){
            adapter.pausePlayer(viewholder as FeedPostDetailCommentAdapter.FeedDetailViewHolder)
        }
    }
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

簡單的答案是肯定的

但是,您為強制創建ViewHolder付出的代價是以編程方式滾動到所需位置,然后通過從自定義滾動偵聽器傳遞的回調捕獲它。

應該需要大約 10 分鍾來實現我對類似問題的回答中描述的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM