android ConstraintLayoutState-如何获取对ConstraintLayoutState对象的引用?

android ConstraintLayoutState-如何获取对ConstraintLayoutState对象的引用?,android,android-constraintlayout,Android,Android Constraintlayout,我很简短地讲述了这一点,我想根据一些行动引发不同的观点。但我甚至找不到美国的参考资料。让我向您展示我目前所拥有的: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) stateCons

我很简短地讲述了这一点,我想根据一些行动引发不同的观点。但我甚至找不到美国的参考资料。让我向您展示我目前所拥有的:

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)
    }
}
依赖项:实现'com.android.support.constraint:constraint布局:2.0.0-alpha2'

我有一个我正在加载的初始文件,其中包含布局状态。看起来是这样的:

 <?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>
main_states_layout.xml:

//在这里,我想要的是当点击按钮时视图发生变化

让我们看看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>

xml res文件夹中的主_states_布局如下所示:

 <?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_布局仅显示绿色背景的文本(但从未显示):



单击按钮时,会看到在onclicklistener中调用的代码没有更新,为什么?

loadLayoutDescription()


在Rebecca的例子中,她可能使用Kotlin合成访问器来访问名为
stateConstraintLayout
ConstraintLayout
。您可以将其替换为对所需的
ConstraintLayout

的引用。简单地说,您应该创建自己的ConstraintLayout对象

ConstraintLayout constraintlayout = new ConstraintLayout

然后,您可以使用对象访问方法,如loadLayoutDescription。首先,您需要检查您的导入

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>


您找到问题的答案了吗?我也在努力解决这个问题——甚至无法访问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>