2017-05-30 15 views
0
onBindViewHolder 

いい方法ですが、1つの問題があります。ビューは必ずしもまだ測定されていません。だから私は、ビュー上で実際の測定値を取得できない場合、TextViewなどのコンテンツの量のようなものを調整できますか? ItemViewが文字列の長さと比較して特定の幅である場合、Itemビューでレンダリングされる文字列の長さを動的に変更したい。 CharSetの長さなどを測定しました。問題はありませんが、ビューの幅を測定できない場合、長すぎるかどうかはどのようにわかりますか?そのアイテムは再生されました。ストリングは2つのアイテムの間にあることもできます。したがって、私はこの種の情報にアクセスできる場所を少なくとも知る必要があります。ありがとう。RecyclerViewアダプタ - レイアウト後にアイテムビューにアクセスできる場所はどこですか?

+0

おそらくあなたは、このようなものを使用する必要があります。 'onBindViewHolder' - " RecyclerViewによって呼び出され、指定された位置にデータを表示する "というドキュメントによると – xAqweRx

答えて

1

リスナを追加すると、ビューツリーの変更をリッスンし、測定が終了した後にビューの幅と高さを取得できます。 https://github.com/ViksaaSkool/AutoFitEditTextので、私の意見で、これがないonBindViewHolder` `でEditText``によって行われるべきである:

final ViewTreeObserver obs = mTextView.getViewTreeObserver(); 
obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
    @Override 
    public boolean onPreDraw() { 
     int height = mTextView.getHeight(); 
     int width = mTextView.getWidth(); 

     // Return true to proceed with the current drawing pass, or false to cancel. 
     return true; 
    } 
}); 
+0

これは私が探していたものです。それが呼び出される必要がある回数を減らす方法に関する提案はありますか?毎回リサイクラー・ビューの中で同じになるだろうか?また、内部のコンテンツのためにレイアウトされた後、この措置ですか?テキスト文字列のように、ビューにその寸法を与えると考えられますか?気になるのは、何度も何度も呼ばれてしまうことです... – gitsensible

+0

@gitsensibleかなり確かにコンテンツをレイアウトした後です。あなたが現在しようとしていることは最適化されているので、あなたのアダプター/レイアウトが何であるか知らなくても答えを出すのは難しいです。あなたの 'ViewHolder'がほとんど同じであれば、あなたのリスナーが最初に呼び出された後にアダプタの幅と高さをキャッシュすることができます。私はあなたのアプリケーションを最適化する必要があるかどうかを判断する前に、最初にそれをベンチマークして動作させることをお勧めします。 – Weizhi

+0

ここでは、TextViewの尺度です:TV.width = 306 TV.measuredWidth = 306 contentItem.MeasuredWidth = 384 contentItem.width = 384 TheSpannable.measuredWidth = 159 – gitsensible

関連する問題