Intereting Posts
Android Room: как моделировать отношения? Добавить ViewPagerIndicator в Android Studio Лучшая практика внедрения обратной связи Retrofit для воссозданной деятельности? Как программно включить флэш-память камеры в Android? Как я могу выровнять меню / значки панели инструментов Android слева, как в приложении «Карты Google»? Размер Layer-List для Android LayerDrawable Могу ли я настроить мой эмулятор Android, чтобы он быстро работал? Как играть или возобновлять музыку другого музыкального проигрывателя из моего кода? Как сделать значок пусковой установки Android W / CameraBase: при подключении к камере произошла ошибка: 0 на вызове camera.open () Разница между push-сообщениями GCM и PARSE Crash casting AndroidKeyStoreRSAPrivateKey для RSAPrivateKey Должен ли я использовать JavaCV или Java-библиотеку OpenCV на Android? Создание ключа API для открытия карты Google Ошибка: выполнение выполнено для задачи «: app: processDebugGoogleServices». > Исправьте конфликт версий

Ошибка xml слияния xml при раздувании

У меня есть класс CustomView и я хочу использовать для него xml-макет. Итак, мой класс расширяет RelativeLayout , раздувает XML-макет и пытается привязать его к себе.

 public class CustomView extends RelativeLayout { public CustomView (Context context) { super(context); LayoutInflater.from(context).inflate(R.layout.layers_list_item, this, true); } } 

Если в моем макете xml есть макет (Linear, например) в качестве корневого элемента, он отлично работает. Но когда я пытаюсь использовать тэг <merge> соответствии с этим ответом, я получил эту ошибку:

<merge /> can be used only with a valid ViewGroup root and attachToRoot=true

Мой xml-макет похож:

 <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" ... > <CheckBox ... /> <TextView ... /> </merge> 

Я также попытался удалить все атрибуты из <merge... > , получив тот же результат. Что не так?

UPDATE : приведенный выше код верен. Как упоминалось в Secretlm , проблема заключалась в том, что <merge> использовался как root element и накачивался другим кодом od od:

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.layers_list_item, R.id.layers_list_item_text); 

И с каждым добавленным элементом адаптер пытался раздуть R.layout.layers_list_item которые имеют <merge> как root.

Solutions Collecting From Web of "Ошибка xml слияния xml при раздувании"

Вы не можете использовать <merge> в качестве root element в своем конечном макете без элемента контейнера. «Использование этого как корневого элемента полезно, когда вы знаете, что этот макет будет помещен в макет, который уже содержит соответствующий родительский вид, чтобы содержать дочерние элементы этого элемента. Это особенно полезно, если вы планируете включить этот макет в другой макет Файл и этот макет не требует другого контейнера ViewGroup "- от" developer.android.com "

В этом примере показано, как работать с <merge> : http://www.coderzheaven.com/2011/06/26/merge-two-layout-xml-in-android/

Обновлено:

Вы должны попробовать с конструктором (Context, AttributeSet) из этого примера. Я думаю, что это решит вашу проблему.

Файл test.xml:

 <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBox android:id="@+id/layers_list_item_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@id/layers_list_item_root" android:layout_alignParentRight="true" android:layout_marginLeft="15dp" android:button="@drawable/ic_launcher" /> <TextView android:id="@+id/layers_list_item_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="left|center_vertical" android:layout_toLeftOf="@id/layers_list_item_switch" android:selectAllOnFocus="true" android:text="tret" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:scrollHorizontally="true" android:textColor="@android:color/black" android:textSize="16sp" android:textStyle="bold" android:typeface="serif" android:clickable="true" /> </merge> 

Класс тестирования, который распространяется от RelativeLayout:

 public class Test extends RelativeLayout { public Test(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.test, this, true); } } 

Основная деятельность:

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } 

Основной макет:

 <com.example.testlayout.Test xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layers_list_item_root" android:layout_height = "fill_parent" android:layout_width = "fill_parent" />