Как объявить переменные, содержащиеся во «включенном» макете? - PullRequest
0 голосов
/ 28 апреля 2019

Мой основной и дополнительный макет содержат переменные. Я включил вторичный макет в основной. Как я могу получить доступ и объявить переменные в дополнительном макете в MainActivity, так как вторичный является настраиваемым xml?

Мне было трудно понять динамику привязки данных.

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:background="#75c49b">

        <ImageView
            android:id="@+id/imageView5"
            android:layout_width="100dp"
            android:layout_height="80dp"
            android:layout_alignBottom="@+id/textView15"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:src="@drawable/pp" />

        <TextView
            android:id="@+id/changePhoto"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignEnd="@+id/imageView5"
            android:layout_alignRight="@+id/imageView5"
            android:layout_below="@+id/imageView5"
            android:text="Change Photo"
            android:textColor="@color/colorAccent" />

        <TextView
            android:id="@+id/textView15"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="57dp"
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            android:layout_toEndOf="@+id/imageView5"
            android:layout_toRightOf="@+id/imageView5"
            android:text="User ID:"
            android:textColor="@color/colorAccent" />



        <TextView
            android:id="@+id/textView16"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView15"
            android:layout_alignStart="@+id/textView15"
            android:layout_below="@+id/logOut"
            android:layout_marginTop="8dp"
            android:text="Welcome"
            android:textColor="@color/colorAccent"
            android:textSize="18dp" />

        <TextView
            android:id="@+id/getFirstName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView16"
            android:layout_alignBottom="@+id/textView16"
            android:layout_marginLeft="9dp"
            android:layout_marginStart="9dp"
            android:layout_toEndOf="@+id/textView16"
            android:layout_toRightOf="@+id/textView16"
            android:text="Baba"
            android:textColor="@color/colorAccent"
            android:textSize="18dp" />

        <TextView
            android:id="@+id/logOut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/imageView5"
            android:layout_marginEnd="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="9dp"
            android:text="Logout"
            android:textColor="@color/colorAccent" />


    </RelativeLayout>


    <ScrollView

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="false"
        android:fadingEdge="none"
        android:fillViewport="true"
        android:overScrollMode="never"
        android:scrollbars="none"
        android:scrollingCache="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <include layout="@layout/themenugrid"> </include>

Я хочу получить доступ к переменным в моем настраиваемом XML-файле (themenugrid), поскольку я включил их в основной макет.

Ответы [ 4 ]

1 голос
/ 29 апреля 2019

Просто получите доступ к нему, как к любому другому элементу вашего XML.Вот в вашем случае напишите:

 TextView textView = findViewById(R.id.sample_text_view);
 textView.setText("Sample 2");
0 голосов
/ 01 мая 2019

Все включенные макеты становятся частью родительского макета.Вы можете получить доступ с помощью findViewBy Id ().т.е.

 View textView = findViewById(R.id.id_inclued_view);
 textView.setText("My Name is Khan. And I am not terrorist :P");
0 голосов
/ 29 апреля 2019

нравится

themenugrid.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/sample_text_view"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Hello World Sample"/>
</LinearLayout>

XML-формат родительского макета, в который вы включаете

<include
    android:id="@+id/header_layout"
    layout="@layout/themenugrid"
    />

В файле Java

 View header = findViewById(R.id.header_layout);
 TextView textView = header.findViewById(R.id.sample_text_view);
 textView.setText("Sample 2");
0 голосов
/ 29 апреля 2019

Вы можете напрямую получить доступ к Id макета включения, используя findViewById в XML-файле. потому что include layout является частью родительского макета. нет необходимости делать дополнительный код или что-либо.

Проверьте пример ниже.

TextView tvName = findViewById(R.id.tv_name);
tvName.setText("Your Include layout ID access and set Text in this textView");
...