繁体   English   中英

使布局可点击

[英]Make layout clickable

在我的应用程序中,我有几个具有不同ListView的片段,但是对于所有片段,我都希望使用相同的空视图,因此我使用空视图创建了一个单独的布局,并使用将其添加到其他布局中

<include
    android:id="@+id/empty"
    layout="@layout/empty_view"/>

一切都按预期工作,但是现在我试图使该视图可单击,以便当用户点击空视图时可以重新加载ListView ,但是我无法使其正常工作。 有什么想法吗?

到目前为止,这是我尝试过的:

(empty_view.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:gravity="center">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scaleType="center"
        android:src="@drawable/error_icon"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#929292"
        android:textSize="24sp"
        android:text="@string/empty_list_error"/>

</LinearLayout>

fragment_list.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true">

    <Spinner
        android:id="@+id/spinner_filter"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="@dimen/activity_vertical_margin"
        android:layout_marginLeft="@dimen/activity_vertical_margin"
        android:layout_gravity="center_horizontal"
        android:visibility="gone"/>

    <include
        android:id="@+id/empty"
        layout="@layout/empty_view"/>

    <ProgressBar
        android:id="@+id/loading_indicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:indeterminate="true"
        style="@android:style/Widget.Holo.ProgressBar.Large"/>

    <LinearLayout
        android:id="@+id/list_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/primary_color"
        android:padding="@dimen/activity_vertical_margin"
        android:layout_below="@id/spinner_filter"
        android:visibility="gone">

        <TextView
            android:layout_width="0dp"
            android:layout_weight="5"
            android:layout_height="wrap_content"
            android:textColor="@color/white_90pct"
            android:textAllCaps="true"
            android:text="@string/subject_indicator"/>

        <View
            android:layout_width="1dp"
            android:layout_height="15dp"
            android:layout_gravity="center_vertical"
            android:background="@color/light_color"/>

        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:gravity="end"
            android:textColor="@color/white_90pct"
            android:textAllCaps="true"
            android:text="@string/grade_indicator"/>

    </LinearLayout>

    <ListView
        android:id="@+id/semesters_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/list_header"/>

</RelativeLayout>

Java类(onCreateView)

LinearLayout emptyView = (LinearLayout) view.findViewById(R.id.empty);
emptyView.setOnClickListener(this);

我还尝试将下一个属性添加到xml,但仍然无法正常工作:

android:focusableInTouchMode="true"
android:focusable="true"
android:descendantFocusability="blocksDescendants"

由于您已经将linearlayout指定为clickable ,因此只需要为onClick事件指定方法。

因此,添加您的linearLayouts xml,如下所示的onClick属性:(也可能需要focusable

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:clickable="true"
  android:onClick="layoutClicked"
  android:focusable="true"
  android:gravity="center">

然后在您的代码中找到与之配套的方法

 public void layoutClicked(View v)
 {
       // Your code here
 }

尝试emptyView.setOnTouchListener()

您是否将empty_view包含在另一个阻止后代可聚焦性的视图中?

自您编辑

您的ListView位于empty_view的顶部,并阻止了可单击性。

由于您的空白视图填充了其父视图,因此请确保空白视图的include标签是其他布局中的最后一个,因此它将在z顺序中排在最前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM