LinearLayout в ExpandableListView - PullRequest
       29

LinearLayout в ExpandableListView

0 голосов
/ 18 июля 2010

Я хочу раздуть дочерний вид компонента ExpandableChildView.

Код:

    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

        View v = convertView;
        LinearLayout linearOpt = themesOptions.get(childPosition);

        if(v == null) {
            v = mInflater.inflate(R.layout.itemrow, null);
        }

        LinearLayout ll = (LinearLayout) v.findViewById(R.id.root);
        ll.addView(linearOpt);
        return v;

    }

Где linearOpt - это вектор, который содержит множество объектов LinearLayout, которые я создал.

    private void prepareThemes(){
        View v = mInflater.inflate(R.layout.widget_configure, null);
        LinearLayout theme = (LinearLayout) v.findViewById(R.id.themeLayout);
        LinearLayout color = (LinearLayout) v.findViewById(R.id.colorLayout);
        LinearLayout trans = (LinearLayout) v.findViewById(R.id.transpLayout);

        themesOptions.add(theme);
        themesOptions.add(color);
        themesOptions.add(trans);

    }

Это R.layout.itemrow xml:

Но я получил эту ошибку:

07-18 10: 48: 49.740: ОШИБКА / AndroidRuntime (2738): java.lang.IllegalStateException: у указанного дочернего элемента уже есть родительский элемент.Сначала вы должны вызвать removeView () у родителя ребенка.

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 09 августа 2010

Я думаю, что проблема вызвана тем, как вы готовите макеты в prepareThemes().

Вы не упомянули, но я предполагаю, что ваш 'layout / widget_configure.xml' определяет такую ​​структуру:?

<LinearLayout android:id="@+id/root">
    <LinearLayout android:id="@+id/themeLayout> <!-- ... --> </LinearLayout>
    <LinearLayout android:id="@+id/colorLayout> <!-- ... --> </LinearLayout>
    <LinearLayout android:id="@+id/transpLayout> <!-- ... --> </LinearLayout>
</LinearLayout>

Затем вы увеличиваете это в prepareThemes(), чтобы получить 3 суб-макета. Но на данный момент они уже зарегистрированы как дочерние элементы окружающего макета (который я назвал «root»). Поскольку ошибка подразумевает, что экземпляр представления может быть добавлен только к одному родителю .

Вы можете сохранить каждый LinearLayout в своем собственном XML-файле, а затем увеличить его 3 раза. Затем эти сохраненные макеты можно добавить ровно один раз для потомка.

Я не уверен, что вы хотите сделать, но я думаю, было бы лучше - вместо подготовки - просто иметь 3 различных макета, которые включают деталь из layout.itemrow, а затем просто сделать switch case в getChildView() и накачайте нужный макет на лету. Потому что даже когда вы сохраняете макет без привязки в prepareThemes: как только у вас будет более одной группы, вы получите ту же ошибку при добавлении предварительно созданного макета к дочернему элементу группы snd.

Надеюсь, это поможет.

...