1

UIに垂直に積み重ねられたパネルがいくつかあります。各パネルにはListViewが含まれています。ユーザーの操作に基づいて、ListViewのアイテム数が更新されます。

私の問題は、ListViewに表示されるアイテムの数を増やすと、含まれているパネルが展開されてそれらが表示されないことです。代わりに、私のListViewは黒にフェードして途切れます。私はこれらの積み重ねられたパネルのそれぞれをプログラムで作成しています-これは作成機能の本体です:

LinearLayout containingPanel = new LinearLayout(TestActivity.this);
containingPanel.setOrientation(LinearLayout.VERTICAL);

// create title
TextView titleText = new TextView(TestActivity.this);
titleText.setText("a title");
titleText.setGravity(Gravity.CENTER);
titleText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));


// create dynamic list view of costs                
ListView dynamicContentListView = new ListView(TestActivity.this);
dynamicContentListView.setAdapter(new MyDynamicAdapter());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
params.weight = 1;
dynamicContentListView.setLayoutParams(params);

// build up GUI

containingPanel.addView(titleText); 

containingPanel.addView(dynamicContentListView);                        
return containingPanel;

ListViewに重みを設定するだけで十分だと思いましたが、そうではありません。すべてのGUI更新は正常に機能しています。新しいアイテムはアダプタをサポートするデータに自動的に追加され、ListViewはそれ自体を適切に更新します。しかし、3つまたは4つの新しいアイテムを追加した後、containingPanelはそれ自体の更新を拒否し、新しいアイテムがブレンドされます。

4

3 に答える 3

3

この関数を試してください。私はそれがあなたを助けるかもしれないと思います。この関数はListView、子に基づいての高さを設定するために使用されます。

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

        int totalHeight = 0;
        int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }
于 2012-08-15T09:40:36.470 に答える
2

ListView(内部を追加することはできますがScrollView、少しの作業なしではできません(どちらもスクロール可能なコンポーネントであるため、OSはどちらをスクロールしようとしているのかをどのように認識しますか?)。isScrollContainer="false"ListViewに追加する必要があります。)

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_contents"
    android:isScrollContainer="false"/>

aの全体的なポイントはListView、ページのレイアウトによって指定された高さが設定されていることです。子供の合計の高さが表示に必要な領域を超えた場合にのみ、スクロール可能になります。

実際に必要なのは、アダプタに支えられたLinearLayoutに似たもののようです。ウェブ上にはいくつかの実装がありますが、独自の実装を作成することもできます。

ListViewただし、高さを次のように設定してプログラムで動的にサイズを変更することにより、ListViewをこの動作にハックすることができますlistCount * itemHeight。これは、ListViewを一貫して拡張する効果があります。

UIデザインを開発するときに、そのようなコンポーネントは不要になる可能性があります。

于 2012-08-15T08:15:05.593 に答える
0

リストビューがデフォルトのサイズである場合、それらをレイアウトに収めることができない場合があります。リストビューをスクロールビューでラップしてから、それらをスクロールすることができます。

于 2012-08-14T15:09:30.903 に答える