2016-09-16 50 views
-1

預期的行爲:ViewHolder在recyclerView註冊可見視圖位置,而不是絕對的視圖位置

你好我使用的是recyclerView來顯示圖像的網格,從保存在ViewAdapter列表<>加載。 當用戶單擊圖像時,會創建一個新片段,並將其作爲參數列在列表<>中的相應項目中。我這樣做與此代碼

private class ShowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
//holder code... 

     @Override 
     public void onClick(View view) { 
      int itemPosition = mRecyclerView.indexOfChild(view); 

      Fragment newDetail = DetailFragment.newInstance(mShowAdapter.getList().get(itemPosition)); 
      //launch Fragment 
     } 
    } 

此:mShowAdapter.getList().get(itemPosition)返回從列表中<>通過的項目。這適用於視圖中的任何項目,但只有當我不向下滾動時才適用。

的錯誤:

當我向下滾動幾頁,我單擊一個項目,錯誤的項目從列表中讀取。例如,假設我在滾動幾頁後單擊第一個可見項目。從列表中檢索的項目實際上是列表<>中的第一項,而不是第27項。

發生這種情況是因爲recyclerView正在註冊相對於VISIBLE項目的點擊位置。不管我滾動的距離有多遠,如果我點擊第三個可見項目,就好像我擊中頂部的第三個絕對項目一樣。

我該如何解決這個問題,以便正確的項目被檢索?

回答

1

嘗試

int itemPosition = getAdapterPosition(); 
+0

正要編輯該問題。使用'itemPosition = MyViewHolder.this.getAdapterPosition();'解決了這個問題。 – fgoogle

+0

@fgoogle問題解決了嗎? –

+0

是的,你可以看到我接受了你的答案。 – fgoogle

0

嘗試在onBindViewHolder()中設置onclick監聽器。

+0

是不是這個非常對性能徵稅? – fgoogle