0

私はAndroid3.1以降のアプリケーションを開発しています。

私は動的フォームジェネレーターの開発者であり、プログラムで多くのチェックボックスを追加する必要があります。

フォームは最初の列に質問があるテーブルになり、他の列にはチェックボックスがあります。

これは、チェックボックスを追加するコードです。

int optionsTotalNum = this.calculateColumsForBlock(block);
            QuestionsGroup qGroup = block.getQuestionsGroup();
            for(int z = 0; z < qGroup.getQuestions().size(); z++)
            {
                tableRow = new TableRow(this);
                Question q = qGroup.getQuestions().get(new Integer(z));
                params = new LayoutParams(this.optionWidth, this.rowHeight);
                params.column = 0;

                TextView optionName = new TextView(this);
                optionName.setText(q.getQuestionText().toUpperCase());
                optionName.setGravity(Gravity.CENTER);
                optionName.setLayoutParams(params);
                tableRow.addView(optionName);

                for (int index = 1; i < optionsTotalNum; i++)
                {
                    params.column = index;
                    CheckBox check = new CheckBox(this);

                    int id = ((z + 1) * 100) + index;
                    check.setId(id);
                    check.setLayoutParams(params);
                    tableRow.addView(check);
                }
                table.addView(tableRow, new TableLayout.LayoutParams(
                        LayoutParams.FILL_PARENT,
                        this.rowHeight));
            }

私はIDを動的に作成するために使用int id = ((z + 1) * 100) + index;しますが、IDを繰り返すかどうかはわかりません。つまり、同じIDを持つ2つのビューがあるかどうかはわかりません。すべてのチェックボックスのIDが異なることはわかっていますが、、、TextViewsおよび、TableLayoutおよびTableRowsを使用し、で使用されるIDを使用できるかどうかはわかりませんCheckBox

findViewById()同じIDのビューが2つある場合はどうなりますか?
同じContentViewに同じIDを持つ2つ以上のビューを含めることはできますか?
すべてのチェックボックスを一意に識別するためのより良い方法はありますか?

4

2 に答える 2

1

実行時に追加しているので..IDを設定する必要はありません..挿入順序を維持し、直接アクセスするコレクションにそれらすべてを保持できます...同じアイデアを続けたい場合。 . . では、ここで複雑なことをしないでください..クラス レベルで静的カウンターを保持するだけです.. id として設定し、それをインクリメントします.

于 2012-04-24T11:03:02.787 に答える
0

一意の ID が必要な場合は、単純に int id = (int) java.util.Date().getTime() を使用します。この関数は現在の日付と時刻をミリ秒単位で返し、常に一意です。今後の参照のために、この ID を配列 (または別のコンテナー) に保存します。

于 2012-04-24T11:55:01.820 に答える