Android ConstraintLayoutStates - как получить ссылку на объект constraintLayoutStates? - PullRequest
0 голосов
/ 12 декабря 2018

Я следую этому очень короткому учебнику здесь , и я хотел бы вызвать различные представления, основанные на каком-либо действии.но я не могу даже получить ссылку на ConstraintLayoutStates.Позвольте мне показать вам, что у меня есть:

Зависимость: реализация 'com.android.support.constraint: layout-layout: 2.0.0-alpha2'

У меня есть исходный файл iзагружаю, который содержит состояния макета.это выглядит так:

main_states_layout.xml:

    <ConstraintLayoutStates
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
>
        <State
                android:id="@+id/start"
                app:constraints="@layout/start_layout"/>
        <State
                android:id="@+id/loading"
                app:constraints="@layout/activity_cl_states_loading"/>
        <State
                android:id="@+id/end"
                app:constraints="@layout/activity_cl_states_end"/>
    </ConstraintLayoutStates>

, когда я вхожу в свою деятельность, чтобы попытаться сослаться на ConstraintLayoutStates, я либо не знаю как, либо он не будет компилироваться, но android studioговорит, что не может найти ссылку на него.какие-нибудь идеи?

enter image description here

ОБНОВЛЕНИЕ: Я пытался использовать мой собственный constraintLayout и установить описание, как упомянуто, но представление будетне обновлять: вот что у меня есть:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
    stateConstraintLayout.loadLayoutDescription(R.xml.main_states_layout)

    myButton.setOnClickListener {
        stateConstraintLayout.setState(R.id.start, 110, 3000)
    }
}

// здесь все, что я хочу выше, это когда кнопка нажата, вид меняется

позволяет взглянуть на содержимоеиз main_activity.xml:

    <?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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:id="@+id/stateConstraintLayout"
>
    <Button android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:id="@+id/myButton"
            android:text="press me" app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintEnd_toEndOf="parent"/>
</android.support.constraint.ConstraintLayout>

и main_states_layout, который находится в папке xml res, выглядит следующим образом:

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

<ConstraintLayoutStates
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

    <State
            android:id="@+id/start"
            app:constraints="@layout/start_layout"/>
    <State
            android:id="@+id/loading"
            app:constraints="@layout/loading_layout"/>

</ConstraintLayoutStates>

и start_layout просто показывает текст с зеленым фоном (но этоникогда не появляется):

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

<android.support.constraint.ConstraintLayout
        xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:background="@color/colorPrimary"
        android:layout_height="match_parent">

    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"

              android:text="My started layout"
              android:textSize="21sp"
              android:textColor="@android:color/holo_orange_light"
              android:id="@+id/appCompatTextView"
              app:layout_constraintTop_toTopOf="parent"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintHorizontal_bias="0.5"/>
</android.support.constraint.ConstraintLayout>

когда кнопка нажата, смотрите код, вызываемый в onclicklistener, но ничего не обновляется, почему?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Проще говоря, вы должны создать свой собственный объект ConstraintLayout.

ConstraintLayout constraintlayout = new ConstraintLayout

, затем вы можете использовать свой объект для доступа к таким методам, как loadLayoutDescription, который у вас есть

0 голосов
/ 04 марта 2019

сначала вам нужно проверить, что вы импортируете синтетический

import kotlinx.android.synthetic.main.main_activity.*

, после этого вам понадобится тот же виджет в вашем макете, например

main activity.xml

<?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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/stateConstraintLayout"
>
    <Button android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:id="@+id/myButton"
            android:text="press me" app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintEnd_toEndOf="parent"
          android:visiblity="visible"/>


<TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:visiblity="gone"
              android:text="My started layout"
              android:textSize="21sp"
              android:textColor="@android:color/holo_orange_light"
              android:id="@+id/appCompatTextView"
              app:layout_constraintTop_toTopOf="parent"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintHorizontal_bias="0.5"/>
</android.support.constraint.ConstraintLayout>

start_layout.xml

<?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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/stateConstraintLayout"
>
    <Button android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:id="@+id/myButton"
            android:text="press me" app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintEnd_toEndOf="parent"
          android:visiblity="gone"/>

      <TextView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:visiblity="visible"
          android:text="My started layout"
          android:textSize="21sp"
          android:textColor="@android:color/holo_orange_light"
          android:id="@+id/appCompatTextView"
          app:layout_constraintTop_toTopOf="parent"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintHorizontal_bias="0.5"/>
</android.support.constraint.ConstraintLayout>
0 голосов
/ 12 декабря 2018

loadLayoutDescription() - это метод ConstraintLayout.

В примере с Ребеккой она может использовать синтетические средства доступа Kotlin для доступа к ConstraintLayout с именем stateConstraintLayout.Вы бы заменили это ссылкой на ваш желаемый ConstraintLayout.

...