Android 在整个布局上单击Listener

Android 在整个布局上单击Listener,android,android-layout,android-listview,android-fragments,android-listfragment,Android,Android Layout,Android Listview,Android Fragments,Android Listfragment,我有一个活动,其中有一个列表片段。如果我没有收到列表中的任何元素,我想在整个布局中添加一个onclick侦听器来重试请求。 活动布局相对浏览: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/relative_browse" android

我有一个活动,其中有一个列表片段。如果我没有收到列表中的任何元素,我想在整个布局中添加一个onclick侦听器来重试请求。 活动布局相对浏览

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relative_browse"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment_list_categories"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@id/android:list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@color/gray"
        android:dividerHeight="1dp"
        android:listSelector="@android:color/transparent" >
    </ListView>

</RelativeLayout>
特别是我没有“点击”日志,除了左边屏幕的一个小边框(就像碎片列表类别覆盖了除了一些像素以外的所有屏幕)。 正确的方法是什么

编辑:这里是我的onCreateView和onClick方法

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    this.inflater = inflater;

    View view = inflater.inflate(R.layout.fragment_list_categories,
            container, false);

    this.container = (ViewGroup) view;

    view.setOnClickListener(this);

    return view;
}


@Override
public void onClick(View v) {
    Log.d("DEBUG", "Click!");
}

您应该做的第一件事是在onCreateView方法中将RelativeLayout实例化为

View view = inflater.inflate("Your fragment layout", null);
RelativeLayout rl = (RelativeLayout) view.findViewByID("your relative layout's ID");
rl.setOnClickListener(this);
return view;
然后实现OnClickListener并重写onClick方法,如下所示:

@override
public void onClick(View v){
   Log.d("Relative LAyout", String.valueOf(v));
}

如果您已经完成了上述操作,请发布您的onCreateView代码。

我看到的第一件事是,
列表视图占用了所有空间

由于已将其高度设置为“匹配父对象”
,因此它将始终占据整个父对象的空间。如果列表为空,则这可能不是所需的行为

ListView有时在将单击传播到其父视图时会很奇怪。当你点击它时,它可能只是死在那里,而不是在链条上。这就解释了为什么你可以点击“边界”;这只是父视图的填充

您可能想考虑将<代码> ListVIEW 高度更改为<代码> WrAPHEngult。这样,如果它是空的,它就不会占用空间,你可以点击它


您可能还想尝试检测它是否为空。如果有两个条目没有占据父项的全部高度,那么如果用户单击“空”区域,预期的行为是什么?如果这也会触发重试,那没关系。如果没有,您需要在此基础上启用/禁用单击。

我已经在编辑中发布了该方法。问题可能是我有一个ListFragment而不是一个简单的片段?我不认为这应该是一个问题。现在的输出是什么?您是否尝试按照Geobits的建议将列表的高度设置为包装内容。另外,尝试将RelativeLayout和ListView的背景设置为不同的颜色。这将有助于您了解跑步时所占的面积和面积。我这样做是为了调试。你是对的,ListView在传播点击事件时很奇怪。我改变了高度以包装内容,它似乎工作得很好,将onclick附加到根相对。如果列表为空,我不希望刷新行为,因此我将设法删除侦听器。
@override
public void onClick(View v){
   Log.d("Relative LAyout", String.valueOf(v));
}