8

現在、私は次のレイアウトを持っています

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 

    android:layout_marginTop="9px" 
    android:layout_below="@+id/desc" 
    android:id="@+id/ll_item"  
    android:orientation="vertical" 
    android:paddingRight="3px" 
    android:paddingLeft="3px" 
    android:paddingBottom="5px" 
    android:paddingTop="5px" 
    android:background="@drawable/rounded_corner_lists" >
<!--
        <ListView android:drawSelectorOnTop="false" android:id="@+id/lv"    android:layout_height="fill_parent" android:layout_width="wrap_content" android:divider="#ddd" android:dividerHeight="1px" android:background="@drawable/white"    />
    -->
    </LinearLayout>

コメントアウトしたリストビュー、高さをwrap_content、fill_parentに設定して、xmlでこれを作成しようとしました。現在、次のコードを使用してプログラムでこれを行っています

LinearLayout ll_item = (LinearLayout) this.findViewById(R.id.ll_item);
        if(list.length() > 0)
        {
            ll_item.setVisibility(View.VISIBLE);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,calcListHeight(list));

            listview = new ListView(this);
            listview.setBackgroundResource(R.drawable.white);
            listview.setDivider( new ColorDrawable(this.getResources().getColor(R.drawable.dividercolor)) );
            listview.setDividerHeight(1);
            listview.setCacheColorHint(0);

            mAdapter  = new JSONAdapter( list, this );
            listview.setAdapter(mAdapter);
            mAdapter.notifyDataSetChanged();
            ll_item.addView(listview, lp);
        }

これが結果です

代替テキスト

代替テキスト

この画像でわかるように、丸みを帯びた角の外観を得るためにリストビューをリニアレイアウトに含めているため、リストビュー全体を含むように自動的に引き伸ばされるだけでなく、2つの要素をラップする方法はありますか?コンテンツを垂直に表示するので、プログラムで高さを設定しないとスクロールしませんか? ? ?

私が言及すべきもう1つのことは、このリストビューをレイアウト全体の小さなサブセクションにしたいので、スクロールビューにすべてのこのレイアウトがあることです。

-scrollview
-textview
-textview

-linearlayout
-listview

- ボタン

ここに私が持っているもののより簡単なレイアウトがあります

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent"
              android:background="@drawable/bg" xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/titlebar">

    <ScrollView android:id="@+id/sv" android:layout_width="fill_parent" android:background="@drawable/bg"
                android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

        <RelativeLayout android:id="@+id/widget28"
                        android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="4dip"
                >


            <LinearLayout android:orientation="vertical" style="@style/rounded_corner_full_width_button"
                          android:id="@+id/editfields">

                <ListView android:drawSelectorOnTop="false" android:id="@+id/lv" android:layout_height="fill_parent"
                          android:layout_width="wrap_content" android:divider="#ddd" android:dividerHeight="1px"
                          android:background="@drawable/white"/>

            </LinearLayout>
        </RelativeLayout>
    </ScrollView>
</LinearLayout>
4

2 に答える 2

18

ListViews は ScrollViews には入りません。

ListView は、限られたウィンドウを無制限のコンテンツに効率的に表示するためのものです。ListView で「スクロールを無効」にして ScrollView 内に配置すると、そもそも ListView を使用する実際的な理由がすべて失われます。

ListView を使用して多数のコンテンツまたは無制限のコンテンツを表示するが、上下にスクロールするコンテンツも含める場合は、 または を使用して ListView にヘッダー ビューまたはフッター ビューを追加しaddHeaderViewますaddFooterView。あなたが説明したように、リストのコンテンツが全体的なレイアウトのごく一部になる場合、これはおそらく最善のアプローチではありません。

限定された小さなコンテンツ セットを表示する場合は、ScrollView を使用して、必要に応じて「リスト アイテム」の子ビューをプログラムで生成します。

インフレートされた XML コンテンツとプログラムで生成されたコンテンツを混合するためにフレームワークで使用される一般的なパターンは、レイアウト XML にプレースホルダー ビューを追加することです。通常はLinearLayoutまたはFrameLayout. findViewById実行時にそれを見つけて、生成された子ビューをそれに追加するために使用します。

ListAdapterすでに作成されている場合は、このアプローチでa を使用することもできますcontent.addView(adapter.getView(position, null, content))。すべてのアダプター位置のループを呼び出すだけです ( でcontent配置したプレースホルダー ビューはどこにありますかfindViewById)。これは、アダプターに少数のリスト項目があることがわかっている場合にのみ実用的であることに注意してください!

于 2010-08-17T21:39:30.907 に答える
0

リストの最後に空のアイテムを追加する

例:

ArrayList<String> options = new ArrayList<String>();
String lastItem = "";
int lastPosition;

options.add(lastItem);

public function addItem() {
    lastPosition = options.size() - 1;
    lastItem = options.get(lastPosition);
    options.remove(lastPosition);

    //add new items dynamically
    for (int i = 0; i < 5; i++) 
        options.add("new item: "+i);

    //add empty item
    options.add(lastItem);
}
于 2015-04-07T06:30:32.200 に答える