我创建了一个特定的布局,以便在我的android应用程序中出现任何互联网错误时显示出来。
我们的想法是将这个布局包含在可能出现问题的片段中。
<androidx.constraintlayout.widget.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="match_parent"
android:layout_height="match_parent"
android:id="@+id/errorLayout">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/imageView2"
android:layout_width="96dp"
android:layout_height="96dp"
android:layout_marginTop="150dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/error_24" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/textView24"
android:layout_width="@dimen/fit_space"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="30dp"
android:layout_marginEnd="10dp"
android:gravity="center"
android:text="@string/error_loading"
android:textColor="?attr/colorOnPrimary"
android:textSize="26sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView2" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/textView26"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:gravity="center"
android:text="@string/try_again"
android:textColor="?attr/colorOnPrimary"
android:textSize="16sp"
android:textStyle="italic"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView24" />
<com.google.android.material.button.MaterialButton
android:id="@+id/buttonRefresh"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_marginTop="30dp"
android:drawableEnd="@drawable/refresh_24"
android:text="@string/refresh"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView26" />
</androidx.constraintlayout.widget.ConstraintLayout>
我尝试在我的片段中使用这个布局中的按钮,但没有成功,我包含了这样的按钮:
<androidx.constraintlayout.widget.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="match_parent"
android:layout_height="match_parent"
android:id="@+id/layoutContainerNews">
<include
android:id="@+id/errorLayoutNews"
layout="@layout/item_layout_error"
android:visibility="gone"/>
<...content...>
</androidx.constraintlayout.widget.ConstraintLayout>
我能够正常显示和隐藏布局,但我无法成功地达到按钮,包括执行单击。
这是我尝试过的许多方法中的一种,都没有成功地执行按钮中的单击。
private fun configButtonRefreshClickListener() = with(binding) {
val refreshButton = errorLayoutNews.buttonRefresh
refreshButton.setOnClickListener {
newsAdapter.refresh()
}
}
如何正确访问此按钮以执行单击?
先谢了。
编辑:我可以从上面的函数中使用相同的结构更改textView中的文本,但我无法单击按钮。
val errorLayout = errorLayoutNews
errorLayout.textView19.text = "Test"
1条答案
按热度按时间zf2sa74q1#
若要使用视图绑定从片段中包含的布局访问按钮,可以执行以下步骤:
请注意,需要在绑定对象的root属性上调用findViewById(),因为按钮包含在另一个布局中。
通过这些更改,您应该能够访问按钮并单击它。
更新:
看起来您可以在代码中访问该按钮,但它没有响应单击。这可能是因为该按钮由于另一个视图与之重叠而没有获得单击事件,也可能是因为没有正确设置单击侦听器。
以下是您可以尝试解决此问题的一些方法:-
您可以通过将按钮的背景色设置为其他颜色并检查其是否可见来检查此情况。如果按钮不可见,请尝试调整布局以使其可见。
您可以尝试在包含按钮的视图上设置单击侦听器,而不是直接在按钮上设置单击侦听器。在您的情况下,这将是ID为"errorLayoutNews"的ConstraintLayout。您可以通过在视图上而不是按钮上调用setOnClickListener来完成此操作,如下所示:
可能是按钮被禁用了,无法接收单击事件。您可以通过调用
refreshButton.isEnabled
并确保它返回true
来检查按钮是否被启用。如果按钮被禁用,您可以通过调用refreshButton.isEnabled = true
来启用它。希望,这些解决方案之一将帮助您解决这个问题,并获得按钮来响应点击,英沙真主。