2016-06-08 369 views
2

在下面的代碼中,每次調用setlisteners方法時,should'nt position的值都會改變嗎? 只有一個方法'setlisteners'在參數位置被傳遞,但是在日誌中,我看到每當我的按鈕發生點擊事件時,它顯示正確的位置。應該不會覆蓋自己並顯示不正確的位置,因爲點擊事件可能隨時發生,那麼位置值會發生變化?單擊監聽器在OnBindViewholder recyclerview android

讓我們假設5次被綁定,我點擊第一個 ItemView控件,然後should'nt它告訴我的最後 舉行的最後位置ItemView控件綁定?

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 


    setListeners(holder,position); 


    } 

private void setListeners(ViewHolder holder, final int position) { 
     holder.updownarrow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.e("ddfg",""+position); 

      } 
     }); 
     holder.leftlayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      } 
     }); 
    } 

位置將舉行最後的持有者這是綁定在onBindViewHolder的位置,因爲我的視圖不叫onBindViewHolder當我點擊它,should'nt位置穩住了陣腳最後綁定,並只顯示只要有任何視圖被點擊,哪一個位置?

回答

1

onBindViewHolder中的位置與您的適配器/數據集中的位置相同。您的Click Listener正在與綁定時在您的數據集中表示的單個ViewHolder設置爲position。即使在所有視圖綁定之後,click事件都沒有被調用,但每個函數實例都已經設置爲使用每個視圖所對應的位置。

如果每個View都共享一個Click Listener的同一個實例,那麼您只能得到最後一個位置。但是,每個View都包含自己的Click Listener實例。

0

不,position將舉行最後的持有者這是斌onBindViewHolder的位置,因爲你的View不調用onBindViewHolder當你點擊它。

有很多可能性,以獲取正確的位置 - 例如,如果你設置&得到的Viewstag的位置或者搜索周邊ViewHolder並檢查它的適配器或佈局位置。

+0

你說過「位置將保持最後一個綁定在綁定視圖的持有者的位置」。然後讓我們假設有5個視圖已被綁定,並且我點擊第一個itemview,那麼它不應該顯示我持有的最後一個位置由最後綁定的itemview? – user6265154

+0

是的,它應該這樣做。但這並不意味着你的最後一個列表項是最後一個綁定視圖。 – yennsarah

0

不要使用onBindViewHolder中的位置。使用這個:

final int adapterPosition = viewholder.getAdapterPosition(); 
// do what ever with it