1

実行中に空のテーブルに一連の行を追加しようとしています。いくつかのテスト コードを使用してみましたが、何らかの理由で画面が空のままです。.XML に要素がある場合、.XML ファイル内にもいくつかの行/要素を追加しない限り、それらは表示されますが、テーブル自体は表示されません。

助けていただければ幸いです。

私のクラスは Activity を拡張します。

テーブルを更新するコードは次のとおりです。

public Runnable UpdateUserList = new Runnable() {
    public void run() {

        TableLayout userTable = (TableLayout) findViewById(R.id.listOfUsers);
        for (String user : userNames) {
            TableRow row = new TableRow(getBaseContext());
            row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

            TextView field = new TextView(getBaseContext());
            field.setText(user);
            field.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

            row.addView(field);
            userTable.addView(row, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        }
    }
};

Thread から、このように Handler を使用してコードを呼び出します。

mHandler.post(UpdateUserList);  

コードは実行され、エラーは出力されません。

これは XML ファイルです。

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


    <LinearLayout android:orientation="vertical"
        android:layout_marginTop="10px" android:gravity="center_horizontal"
        android:layout_weight="1" android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <TextView android:text="@string/userList"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:textSize="25px" />

    </LinearLayout>

    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:id="@+id/listOfUsers">
    </TableLayout>

</LinearLayout>

どんな助けでも非常に役に立ちます。私は今とても立ち往生しています。

編集: ListView の使用

private Runnable UpdateUserList = new Runnable() {
    public void run() {
        ListView userTable = (ListView) findViewById(R.id.listOfUsers);
        userTable.setAdapter(new ArrayAdapter<String>(getBaseContext(),
                R.layout.connectserver, userNames));
    }
};

そしてXML:

<ListView android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:id="@+id/listOfUsers" />

TableLayout ではなく。

4

1 に答える 1

2

TableLayout の代わりに List を使用する方が簡単だと思います。複数のアイテムを保持するように構築されており、java.util.List または Array と簡単に統合できます。第二に、さらに重要なことは、表示されているよりも多くの項目がある場合、メモリ効率が大幅に向上することです。

List を使用すると、N 個のリストに対して表示可能な行 + 1 のビューのみがインスタンス化されます。TableLayout を使用して同じリストを表示すると、N 個のビューがインスタンス化されます。したがって、リストが大きくなると、TableLayout でのメモリ使用量も大きくなります。リストではそうではありません。そのリストに項目がいくつあっても同じです。

さらに、ユーザーがアイテムをクリックしたときにどのアイテムが選択されたかを追跡するためのより良い方法を提供します。TableLayout はこれに関して何の助けにもならないので、選択を行うための独自のメカニズムを展開する必要があります。

于 2010-12-08T05:00:43.957 に答える