2017-09-08 9 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

SELECT_ITEM_TAPPED_POS値を得ることができますか? – 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); 
    } 
}); 

その後活動のreveiverは、すでに試してみました何...

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

HTH、マイク・

+0

私は本当に良いものを聞いて幸せになるでしょう。 – Mikey

+0

Observerパターンが何で、コールバックが何であるかは明らかです。 'OnClickListener()'は例です - そう、私はそう仮定します。しかし、あなたは比較的高価なLocalBroadcast/Intentを使って、寄付されたプリミティブをHOSTINGの 'Activity'に送信しています - これはどういう意味ですか?コールバックを使うと、 'Activity'によってインプリメントされたインターフェースであろうと、RxJavaのようなライブラリ(https://stackoverflow.com/a/30285361/4252352のようなもの)であろうと、すべてが必要です。また、これはあなたが使用したコードのコピー貼り付けのようなもので、質問の答えとしては調整されていないようです。 –

+0

私はAndroidに少し新しく、これは私の最初のプロジェクトからのものです。その意図は、ビューを再利用可能にし、アクティビティから分離したものにすることでした。だから、それは何かがタップされた/長いタップされたことをその所有者に知らせることであり、活動が何をすべきかを決めることです。コールバックはそこに興味深いアイデアです。私はそれをチェックします。あなたのサンプルにはサンプルが1つも含まれていませんが、見つけたら表示されます。質問に合わせて調整されていないため、タップしたときに項目をスクロールするソリューションです。 OPは彼の実装について何の示唆もしなかった。 – Mikey