在我的应用程序中,我有几个具有不同ListView
s的片段,但对于所有这些片段,我想使用相同的空视图,因此我使用空视图创建了一个单独的布局,并将其添加到其他布局中
<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"
答案 0 :(得分:1)
由于您已将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
}
答案 1 :(得分:0)
尝试emptyView.setOnTouchListener()
您是否将empty_view
包含在阻止后代可聚焦性的另一个视图中?
自编辑
您的ListView位于empty_view和阻止可点击性之上。
答案 2 :(得分:0)
由于您的空视图填充其父视图,请确保您的空视图的include标记是另一个布局中的最后一个,因此它将是z顺序中的最顶层。