亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更改RecyclerView所有項目的View可見性

更改RecyclerView所有項目的View可見性

森林海 2023-06-21 15:04:35
我有一個 RecyclerView,它在單擊某些項目時播放錄音。我希望當用戶單擊正在播放特定錄音的 item1 時的行為,并且按鈕視圖發生更改,這工作正常。但同時,當 item1 錄音正在播放并且用戶單擊 item2 時,item1 行按鈕將返回到其原始位置。下圖顯示了單擊 item1(第 1 行)時的視圖。(這工作正常)我還測試了它以控制 inBindViewHolder 方法中的視圖。但它不起作用,因為每當我單擊 holder 對象時,僅控制當前選定行的視圖。下面的代碼部分放在 ViewHolder 中mPlayAudio.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view)                 {                    Log.d(TAG, "onClick: Present in onClick mPlayAudio");                    if (listener != null)                     {                        final int position = getAdapterPosition();                        if (position != RecyclerView.NO_POSITION)                         {                           // This section contain the code to play and stop                               the audio                          // Using below line I only able to change selected                           // row button View not other row Button View                            mPlayAudio.setImageResource(R.drawable.play);                          }                     }                 }});我也在 onBindViewHolder 方法中嘗試過此操作,但仍然不起作用。下面的代碼添加到onBindViewHolder中holder.mPlayAudio.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View view)             {               // This section contain code to play and stop audio               //Using below statement I only able to change the               //visibility of current selected row View not others               holder.mPlayAudio.setImageResource(R.drawable.play);            }}
查看完整描述

1 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

所以我終于能夠在自己的項目中嘗試這一點。


回答 在 BindViewHolder 中,單擊某個項目后,保存該項目的位置值。然后在單擊事件中調用notifyDataSetChanged,這將刷新適配器?,F在它獲取您的結果,BindViewHolder 內部有一個 if 語句檢查該值是否應相應設置(或不可見),否則顯示為可見。


示例代碼


public class SelectorAdapter extends RecyclerView.Adapter<SelectorAdapter.ItemHolder> implements View.OnClickListener {


private List itemList;

private int selectedKey;


public SelectorAdapter(List list) {

    itemList = list;

}


@Override

public void onClick(View v) {


}



/* ViewHolder for each item */

class ItemHolder extends RecyclerView.ViewHolder {


    //title

    @BindView(R.id.selector_title)

    TextView title;


    @BindView(R.id.selector_layout)

    LinearLayout selector;


    ItemHolder(View itemView) {

        super(itemView);

        ButterKnife.bind(this, itemView);


    }

}



@Override

public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View itemView = LayoutInflater.from(parent.getContext())

            .inflate(R.layout.item_layout_selector, parent, false);


    return new ItemHolder(itemView);

}



@Override

public void onBindViewHolder(ItemHolder holder, int position) {


    String title = (String) itemList.get(position);


    holder.title.setText(title);


    if (position != selectedKey) {

        holder.title.setBackgroundResource(R.drawable.selector);

    } else {

        holder.title.setBackgroundResource(R.drawable.selector_selected);

    }



    holder.itemView.setOnClickListener(v -> {

        Timber.e("selected item: %s", position);

        selectedKey = position;

        notifyDataSetChanged();

    });


}



@Override

public int getItemCount() {

    Timber.e("itemCount: %s", itemList.size());

    return itemList.size();

}



}

這是我自己的項目,當我選擇一個項目時,它會將背景資源更改為選定狀態,然后其余部分返回到默認狀態。


查看完整回答
反對 回復 2023-06-21
  • 1 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號