2017-09-08 59 views
0

我想實現這個如何平滑滾動RecyclerView如果產品不完全可見

this

我想檢查點擊的項目是否完全可見,如果不是,我想順利向上/向下滾動。我有一個GridLayoutManager 3列。這些物品都是相同的大小,只是ImageViews

我能夠得到RecyclerView與滾動:

@Override 
    public void onClick(View view) { 
     int adapterPosition = RecHolder.this.getAdapterPosition(); 
     mRecyclerView.scrollToPosition(adapterPosition); 
     ... 
} 

但它不是一個「滾動」,這是非常laggish和方式太快。 如果我嘗試使用mRecyclerView.smoothScrollToPosition(adapterPosition);,結果是一樣的。完全一樣的動作,沒有明顯的差異。

+0

你嘗試過什麼了嗎? – stealththeninja

+0

我添加了一些細節 – David

回答

-1

不要打擾測試,看看它是不是完全可見。只需插入一條命令即可滾動到該位置。既然你沒有發佈任何你的代碼,我不能具體說明你會怎麼做。我個人有我的適配器創建一個意圖,我的活動處理意圖。如果這就是你正在做的,那麼你可以包含getAdapterPosition()作爲額外的像這樣(vh是我的ViewHolder)。

vh.mImageView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     SelectItemGridAdapter.ContentViewHolder vh = (SelectItemGridAdapter.ContentViewHolder) (((View)v.getParent()).getTag()); 
     Intent intent = new Intent(ACTION_SELECT_Item); 
     intent.putExtra(Constants.MSG_TYPE, SELECT_ITEM_TAPPED); 
     intent.putExtra(SELECT_ITEM_TAPPED_ID, vh.viewModel.mItemId); 
     intent.putExtra(SELECT_ITEM_TAPPED_POS, vh.getAdapterPosition()); 
     LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent); 
    } 
}); 

然後在活動中可以得到SELECT_ITEM_TAPPED_POS值reveiver ...

int pos = intent.getIntExtra(SelectItemGridAdapter.SELECT_ITEM_TAPPED_POS, -1); 
if (pos > -1) 
    rv.scrollToPosition(pos); 

HTH,麥克

+0

我會很高興聽到更好的。 – Mikey

+0

你顯然知道觀察者模式是什麼,回調是什麼? 'OnClickListener()'就是一個例子 - 所以我會假設是的。然而,你正在使用一個相對昂貴的LocalBroadcast/Intent向HOSTING「活動」發送包裝原語 - 這是怎麼回事?使用回調,這就是所有需要的,無論是通過'Activity'實現的接口還是使用類似RxJava的庫,如:https://stackoverflow.com/a/30285361/4252352。此外,這看起來就像是你使用過的一些代碼的複製粘貼,而不是定製爲問題的答案。 –

+0

我對Android有點新,這是來自我的第一個項目。意圖(赦免雙關語)是爲了使視圖重新使用並從活動中分離出來。因此,它應該做的就是向其所有者宣佈某件事被挖掘/長時間使用,並讓活動決定要做什麼。回調是一個有趣的想法。我會檢查一下。你的樣品不包括一個,但我會看看我是否能找到一個。至於它不適合這個問題,它是一個解決方案,當它被點擊時將項目滾動到位。 OP沒有暗示他的實施。 – Mikey

相關問題