ListView を折りたたまずに ScrollView に配置するにはどうすればよいでしょうか? 質問する

ListView を折りたたまずに ScrollView に配置するにはどうすればよいでしょうか? 質問する

この問題の解決策を探してみましたが、私が見つけた唯一の答えは「ListViewをScrollViewに入れないでください「しかし、その理由についてはまだ本当の説明は見ていません。私が見つけた唯一の理由は、Google がユーザーがそうすべきではないと考えているということのようです。まあ、私はそう思っているので、そうしました。

質問は、ListView を最小の高さに折りたたむことなく ScrollView に配置するにはどうすればよいかということです。

ベストアンサー1

これが私の解決策です。私は Android プラットフォームを使い始めたばかりで、特に .measure を直接呼び出してプロパティを直接設定する部分は少しハックっぽいと思いますがLayoutParams.height、うまくいきます。

呼び出すだけUtility.setListViewHeightBasedOnChildren(yourListView)で、アイテムの高さにぴったり合うようにサイズが変更されます。

public class Utility {
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();

        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            if (listItem instanceof ViewGroup) {
                listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
             }

             listItem.measure(0, 0);
             totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }
}

おすすめ記事