web-dev-qa-db-ja.com

ScrollViewに含まれるListViewのスクロールを無効にします

ユーザーにプロファイル画面を表示したい。

そのユーザーが作成したコンテンツを表示するには、3つのビュー(2 ButtonsImageView)とListViewが必要です。

ただし、ListViewをスクロールさせたくありません。代わりに、必要なだけ大きくして、すべてのビューをScrollView内に配置するため、最初の3つのビューはListViewでスクロールアウトします。もちろん、これは意図したとおりには機能しません。

3つのアイテムはすべてLinearLayoutの中にあります。私はそれらをListViewの最初のアイテムにすることを考えましたが、これはそれらを最初のアイテムとして選択可能にし、不必要なコーディングをしなければならないことにつながります。

これを簡単に行う方法はありますか、それともレイアウトをリストビューの最初のアイテムにすることに固執する必要がありますか?

35
Charlie-Blake

それらを最初のアイテムとしてリストビューに追加することは、かなり良い解決策のようです。

ビューを選択不可にするには、ビューと.setClickable(false)を取得します。

9
Yalla T.

このための非常に簡単な解決策を見つけました。リストビューのアダプターを取得し、すべてのアイテムが表示されたときにそのサイズを計算します。利点は、このソリューションがScrollView内でも機能することです。

例:

public static void justifyListViewHeightBasedOnChildren (ListView listView) {

    ListAdapter adapter = listView.getAdapter();

    if (adapter == null) {
        return;
    }
    ViewGroup vg = listView;
    int totalHeight = 0;
    for (int i = 0; i < adapter.getCount(); i++) {
        View listItem = adapter.getView(i, null, vg);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams par = listView.getLayoutParams();
    par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
    listView.setLayoutParams(par);
    listView.requestLayout();
}

ListViewオブジェクトを渡してこの関数を呼び出します。

justifyListViewHeightBasedOnChildren(myListview);

上記の関数は、投稿の修正です。 リストビューでのスクロールを無効にする

アダプタをリストビューに設定した後、この関数を呼び出すことに注意してください。アダプタのエントリのサイズが変更された場合、この関数も呼び出す必要があります。

48
Chris623

これを行うには

listView.setScrollContainer(false);

詳細については確認してください

非スクロール可能なリストビューを取得する方法?

11

Viewの上に背景が見えないListViewを追加します。 View.OnTouchListener()を設定します。 onTouch()View.OnTouchListener()メソッドでtrueを返すことにより、イベントを消費します。

リストを再度スクロールして戻す場合は、透明なViewに設定されているタッチリスナーを削除します

5
Sudarshan Bhat

リストビューで限られた数のアイテムを表示する必要があり、リストビューのスクロールを停止する場合は、リストビューの高さをアイテムの合計の高さよりも大きくする必要があります。

たとえば、3つのアイテムを表示するとします。 (行の高さは30です)。アイテムの合計の高さは3 x 30dp = 90dpになり、

したがって、リストビューの高さを90より大きく設定する必要があります。例:100dp。そのため、リストビューはどの場合でもスクロールしません。

4
Usman Nisar

最良の方法は、2つのボタンと画像ビューをLinearLayout(または必要に応じてレイアウト)に配置し、addHeaderViewメソッドを使用してこのレイアウトをリストヘッダーとして追加することだと思います。

http://developer.Android.com/reference/Android/widget/ListView.html#addHeaderView(Android.view.View

2
Olivier Bonal

次の指示で:

name_lista.getLayoutParams (). height = new_size

new_sizeは、リストの要素の数に従って計算する変数です。次に例を示します。

new_size = 100 * list_size;
0
fredy