1

この質問がスタックに追加されているのを見たことがありますが、情報はまだ役に立たなかったり成功したりしていないので、よくわかりません。

私がやろうとしていることの要点:
たとえば、xml、some_details_view.xml で定義されたレイアウトがあります。

setContentView(R.layout.some_details_view);

親相対レイアウト、線形ヘッダー レイアウト、線形フッター レイアウト、いくつかのラベルを保持する相対レイアウトを含む中央スクロール レイアウト (テキスト ビューの値型) を使用してレイアウトされたテキスト ビューが多数あります。そして、スクロール ビューの相対レイアウトの下部に、現在フレーム レイアウトをプレース ホルダーとして配置しています。

対応するアクティビティの作成時に、前のアクティビティから渡されたデータを使用して、それぞれのテキスト ビューにテキストを設定しました。基本的なもの。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white" >

    <LinearLayout
        android:id="@+id/header"

        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" >

                        ...some header content

    </LinearLayout>         

    <LinearLayout
        android:id="@+id/footer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="vertical" >

        ..some footer content

    </LinearLayout>

    <ScrollView
        android:id="@+id/scroll"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/footer"
        android:layout_below="@+id/header"
        android:layout_margin="5dip" >


        <RelativeLayout
            android:layout_width="fill_parent"
            android:id="@+id/relativeScroll"
            android:layout_height="wrap_content" >

            ...text views in relative layout

            <FrameLayout
                android:id="@+id/placeholder"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_below="@+id/moreInfoValue" />

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

特定のデータのテキスト ビューを設定した後、非同期タスクを使用して、静的フォーム レイアウトの下部に履歴リスト タイプとして表示する追加データを取得します。0 個以上の項目がある可能性があるため、1 つ以上のテキスト ビューを追加するか、まったく追加しません。

メインUIスレッドで実行することを理解している実行後では、既存のコンテナレイアウト/ビューグループを見つけて、新しいテキストビューを追加する新しいリニアレイアウトを追加するか、新しいテキストビューを直接追加します既存のコンテナ レイアウトに。

これが私が試した最新のものです:

ViewGroup mContainer = null; //defined as member variable of activity class and instatiated in on create
mContainer = (ViewGroup)findViewById(R.id.placeholder); //set in on create
LinearLayout ll = new LinearLayout(context); //on post execute of async task
ll.setOrientation(LinearLayout.VERTICAL);
mContainer.addView(ll); //add a new linear layout to an existing container layout
//add some new text view widgets items dynamically
for(NewDisplayItem item : items)
{
    TextView tv = new TextView(context);
    tv.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
    tv.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
    tv.setText(item.getSomeText());
    ll.addView(tv); //add text view to new linear layout
}

UI が読み込まれると、上記のコードを使用してステップスルーし、コントロールが追加されるのを確認した後、新しい項目がレイアウトに追加されません。

それが何であるかはわかりませんが、機能していないという事実に加えて、このアプローチについて何かが正しくないようです。アクティビティが読み込まれると、すべての静的ビューが設定され、表示されます。ローディング ダイアログをポップアップし、非同期タスクをステップ実行すると、動的コントロールが 1 つずつレイアウトに追加されるのを期待できますか?

4

2 に答える 2

2

まず、textView.setWidth(int)パラメータとしてwidthピクセル単位で取得します。

LinearLayout次に、追加するでレイアウト パラメータも設定する必要があります。

設定方法LayoutParamsは次のとおりです。

ll.setLayoutParams(new LinearLayout.LayoutParams(
       LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

あなたも同じですTextViews

于 2012-08-31T14:16:57.233 に答える
1

Ovidiu Latcu は良い答えを持っています。良い質問は次のとおりです: ListView を使用していない理由はありますか? ListView には、RAM が不足しないようにするための多くのメカニズムがあります。

于 2012-08-31T14:22:36.170 に答える