![](/img/trans.png)
[英]How to control the item in 'RecyclerView' from other place in a fragment?
[英]How to get control to other item in recyclerview?
我有一個水平的recyclerView
,當我單擊每個元素時,它里面的LinearLayout
setVisibility(VISIBLE)
可以正常工作。
所以,現在我想要的是,當我單擊當前項目時,同時單擊LinearLayout
setVisibilty(VISIBLE)
(通常),如果我之前單擊了另一個項目,則其中的LinearLayout
為setVisibility(GONE)
。
到目前為止我嘗試過的
viewHolder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(viewHolder.linearLayout.getVisibility() == View.VISIBLE){
//hide
viewHolder.linearLayout.setVisibility(View.GONE);
}else{
int nowClickedId = 0;
//hide LinearLayout of other position that clicked before
if(nowClickedId != position){
viewHolder.linearLayout.setVisibility(View.GONE);
}
//show for current clicked item
viewHolder.linearLayout.setVisibility(View.VISIBLE);
//get current item position store at the array
nowClickedId = viewHolder.getAdapterPosition();
}
}
});
到目前為止,我只對當前位置的項目具有控制權,如何才能獲得對先前單擊項目的控制?
創建一個變量來存儲單擊的項目的位置,並全局聲明它。
private int nowclicked=-1;
現在,只要單擊位置,便會在您的視圖保持器內部將其存儲到全局變量,並調用notifyDataSetChanged()
來通知適配器數據已更改。
private class Sample extends RecyclerView.ViewHolder{
public Sample(View itemView) {
super(itemView);
viewHolder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
nowclicked = getAdapterPosition();
notifyDataSetChanged();
}
});
}
}
在onBindViewHolder
如果擴散相等,則顯示linearLayout
否則將其隱藏。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(nowclicked==position){
viewHolder.linearLayout.setVisibility(View.VISIBLE);
}else {
viewHolder.linearLayout.setVisibility(View.GONE);
}
}
嘗試在onBindViewHolder()方法中編寫此代碼,並確保編寫
holder.viewHolder.container.setOnClickListener();
根據職位,您可以做任何您想做的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.