Макет внутри другого макета недоступен из действия - PullRequest
0 голосов
/ 08 мая 2019

У меня есть несколько макетов, которые определены в иерархическом порядке. Проблема в том, что когда я пытаюсь получить доступ к элементу, который определен во внутреннем макете, он дает мне NullPointerException.

Это моя структура макета.

 R.layout.activity_map
->   <include layout="content_map"> 
->   <include layout="terrace_parent_map"> 
->   <include layout="terrace_collection_map"> 

Теперь terrace_collection_map имеет макет ограничения, к которому мне нужно получить доступ из действия.Ниже приведен макет.

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/constraintTerraceLayout"
    >


</android.support.constraint.ConstraintLayout>

Но когда я пытаюсь получить идентификатор constraintLayout, он возвращает ноль.

 constraintTerraceLayout= findViewById(R.id.constraintTerraceLayout);

** Edit - terrace_collection_map **

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/constraintTerraceLayout"
    >

    <ImageView
        android:id="@+id/imageView30"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:background="@drawable/terrace" />


</android.support.constraint.ConstraintLayout>

1 Ответ

1 голос
/ 08 мая 2019

Попробуйте добавить тег <merge />, который поможет вам исключить избыточные группы представлений в иерархии представлений при включении одного макета в другой.

Например, если ваш основной макет является вертикальным LinearLayout, в котором два последовательных вида могут быть повторно использованы в нескольких макетах, то для многократного использования layout, в котором вы размещаете два вида, требуется собственный корневой вид. ,

Поэтому используйте тег <merge>, если activity_map.xml имеет LinearLayout в качестве родительского тега. Затем измените родительский тег terrace_collection_map.xml, как показано ниже:

<merge xmlns:android="http://schemas.android.com/apk/res/android">
 //..........Your Custom Layout Design...........
</merge>

Эта ссылка поможет вам кратко, https://developer.android.com/training/improving-layouts/reusing-layouts

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