Вращающееся представление приводит к тому, что динамически добавленные флажки имеют одинаковый текст - PullRequest
1 голос
/ 16 декабря 2011

Используя LayoutInflater, я динамически генерирую несколько таблиц TableRow, каждая из которых содержит флажок.Все работало отлично, пока вы не повернули дисплей.Каждый CheckBox получает тот же текст и проверенное состояние, что и последний созданный CheckBox.

Я обнаружил, что если я назначил уникальный идентификатор каждой строке и каждому флажку, он работает правильно (каждый флажок сохраняет свой уникальный текст и проверенное состояние).

Если несколько раз надувать один и тот же макетНужно ли присваивать уникальный идентификатор каждому представлению внутри раздутого макета?Это наверняка может быть неприятно, если у вас есть вовлеченный макет, который раздувается.

Вот мой код, который работает:

основное действие

public class PrototypeActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        TableLayout tablesLayout = (TableLayout)findViewById(R.id.TableLayout1);
        tablesLayout.removeAllViews();

        String[] values = new String[] { "Item 1", "Item 2", "Item 3"};     

        for (int i = 0; i < values.length; i++) {
            View view = inflater.inflate(R.layout.row_layout, null, false);
            view.setId(i);
            CheckBox checkBox = (CheckBox) view.findViewById(R.id.tableCollectCheckBox);
            checkBox.setId(values.length+i);
            checkBox.setText(values[i]);
            tablesLayout.addView(view);
        }
        tablesLayout.invalidate();
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/LinearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TableLayout
                android:id="@+id/TableLayout1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"/>

        </LinearLayout>
    </ScrollView>
</FrameLayout>

row_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<TableRow 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:orientation="horizontal">
        <CheckBox
            android:id="@+id/tableCollectCheckBox"
            android:text="DataTable"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>
</TableRow>

1 Ответ

0 голосов
/ 16 декабря 2011

Вам следует позвонить checkBox.setFreezesText(true).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...