どのように私はScrollViewにない、またはScrollViewが無効になっているリストビューを作成するのですか?
-
19-09-2019 - |
質問
私はなど、ListAdapter、および項目選択を使用することができるというように、リストビューでのグッズの一部をしたいが、私はそれのScrollView部分を望んでいません。私はその部分を自分で実装する、異なる方法で(なぜか、どのように私はこれを行う本当にこの質問のポイントではありませんので、「なぜ」聞かないでください)。
ScrollViewではないか、スクロールが無効になっているListViewコントロールを持ってする方法はありますか?
解決
ListView
はScrollView
ではありません。 ListView
はinstrinsicallyスクロールありません。私はあなたが簡単なAPIをスクロール無効にすることができます信じていません。もしそうなら、あなたの選択肢はListView
をサブクラス化し、行動、クローンListView
をスクロールオーバーライドして、行動をスクロールなくす、あるいは物事にあなたが望むようにレンダリングする独自のAdapterView
を書くための方法を見つけようとするかのいずれかです。
他のヒント
これを実行する別の方法は、あなたがでっち上げてきたものは何でもカスタムスクロール溶液中ListView
をラップすることです。あなたは、単にListView
の高さは、全ての行(リストビューのLayoutParams
を使用)と全く同じ高さに設定した場合、それは通常のビューのように行動し、スクロールすることができません。したがって、あなたは別のスクロールビューに追加することができます。この方法の難点は、あなたが先に時間のあなたのリストの高さを知っている必要がありますので、あなたは、各行の高さを知る必要があるということです。また、これは一度にすべての行を作成しますので、あなたは、ビュー・リサイクル機能を利用することができません。
あなたが先に時間の高さを計算する簡単な方法を持っていない場合、あなたはListView
をオーバーライドし、それを独自の高さの仕様を与えることによって、あなたのためにそれをやってにonMeasure
をだますことができます:
// Calculate height of the entire list by providing a very large
// height hint. But do not use the highest 2 bits of this integer;
// those are reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);