Java Android:在listfragment中的listview外部单击
我有一个listview,理论上它占据了版面的所有空间,但实际上它只占据了版面的一半,因为它只有5个元素,并且没有覆盖整个屏幕。我想知道我什么时候触摸listview外部。我尝试为包含列表的listfragment的布局创建clicklistener方法,但从未使用过,因为理论上listview占据了所有布局,因此没有找到单击。活动的布局大致相同。在这种情况下,只能在边缘上找到单击,因此我无法找到解决问题的方法 以下是片段布局:Java Android:在listfragment中的listview外部单击,java,android,listview,onclicklistener,Java,Android,Listview,Onclicklistener,我有一个listview,理论上它占据了版面的所有空间,但实际上它只占据了版面的一半,因为它只有5个元素,并且没有覆盖整个屏幕。我想知道我什么时候触摸listview外部。我尝试为包含列表的listfragment的布局创建clicklistener方法,但从未使用过,因为理论上listview占据了所有布局,因此没有找到单击。活动的布局大致相同。在这种情况下,只能在边缘上找到单击,因此我无法找到解决问题的方法 以下是片段布局: <LinearLayout xmlns:android="h
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/list" />
以下是活动布局:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.utente.actionbar.MainActivity">
<Button
android:text="MULTI"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="26dp"
android:id="@+id/button" />
<Button
android:text="SINGOLO"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button"
android:layout_alignLeft="@+id/button"
android:layout_alignStart="@+id/button"
android:layout_marginBottom="25dp"
android:id="@+id/button2" />
理论上,listview占据了所有布局
不是一个理论,这正是发生的事情;通过使用android:layout\u height=“match\u parent”视图将始终采用全屏高度
listView.setOnClickListener
如果您想查看是否单击了listView
中的任何位置,则可以使用它,但是您通常希望listView.setOnItemClickListener
查看您是否单击了任何单个项目,而不是整个列表
参考:
如果您真的想缩小列表视图
,那么android:layout\u height=“wrap\u content”
是一个选项,但我不确定如果没有内容实际加载到该视图中,该选项是否有效,因为内容包装是在充气时应用的,因为它没有适配器设置,所以无法完成
如果您需要从字面上“在ListView之外”检测侦听器,那么您需要在该片段的
rootView
上设置某种类型的单击/触摸侦听器
public View onCreateView(...) {
rootView = inflater.inflate(...);
listView = ...;
listView.setOnTouchListner(...
@Override
public boolean onTouch(View v, MotionEvent event) {
return false; // Says that click was not handled here.
}
});
rootView.setOnTouchListner(...
// TODO: Check if click landed outside the ListView
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() != android.R.id.listView) { // Not the list
if (event.getAction() == MotionEvent.ACTION_UP) {
// Up action more reliable than "down"
return true;
}
}
}
);
return rootView;
}
理论上,listview占据了所有布局
不是一个理论,这正是发生的事情;通过使用android:layout\u height=“match\u parent”视图将始终采用全屏高度
listView.setOnClickListener
如果您想查看是否单击了listView
中的任何位置,则可以使用它,但是您通常希望listView.setOnItemClickListener
查看您是否单击了任何单个项目,而不是整个列表
参考:
如果您真的想缩小列表视图
,那么android:layout\u height=“wrap\u content”
是一个选项,但我不确定如果没有内容实际加载到该视图中,该选项是否有效,因为内容包装是在充气时应用的,因为它没有适配器设置,所以无法完成
如果您需要从字面上“在ListView之外”检测侦听器,那么您需要在该片段的
rootView
上设置某种类型的单击/触摸侦听器
public View onCreateView(...) {
rootView = inflater.inflate(...);
listView = ...;
listView.setOnTouchListner(...
@Override
public boolean onTouch(View v, MotionEvent event) {
return false; // Says that click was not handled here.
}
});
rootView.setOnTouchListner(...
// TODO: Check if click landed outside the ListView
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() != android.R.id.listView) { // Not the list
if (event.getAction() == MotionEvent.ACTION_UP) {
// Up action more reliable than "down"
return true;
}
}
}
);
return rootView;
}
我想这解决了你的问题
我想这就解决了你的问题。我不明白如何找到外部的click
listView。setOnClickListener
将捕获整个视图。您的任务是决定是否单击列表中的某个项目,但如果我使用listView.setOnClickListener
我在列表中找到了单击,我想知道当我在列表之外单击时是的,我将match\u parent放在外部布局中,它就工作了!但是我不明白为什么,你能给我解释一下吗?啊,我明白了,非常感谢!我没有使用您现在发布的代码,但是使用了前面的代码,但是它们或多或少都是相同的。我不明白如何找到外部的clicklistView。setOnClickListener
将捕获整个视图。您的任务是决定是否单击列表中的某个项目,但如果我使用listView.setOnClickListener
我在列表中找到了单击,我想知道当我在列表之外单击时是的,我将match\u parent放在外部布局中,它就工作了!但是我不明白为什么,你能给我解释一下吗?啊,我明白了,非常感谢!我没有使用你现在发布的代码,而是之前的代码,但它们或多或少是相同的less@PavneetSingh不,它不起作用。你想在片段中包含两部分,第一部分是listview,第二部分在listview的外面和下面。你想要第二个是可点击的吗?是吗?@mismnc是的,但是没有两种布局划分屏幕,理论上有一个listview占据了所有屏幕,但具体来说它只占据了一半,因为只有5个fragments@PavneetSingh不如果你想在片段中包含两个部分,第一个部分是listview,第二个部分在listview的外面和下面。你想要第二个是可点击的吗?是吗?@mismnc是的,但是没有两种布局划分屏幕,理论上有一个listview占据了所有屏幕,但具体来说它只占据了一半,因为只有5个片段。显式空视图应该可以工作。我没有想到:)我更喜欢这个解决方案,尽管它并不完全是“在ListView之外”,它只是“其他视图”,一个显式的空视图应该可以工作。我没有想到:)我更喜欢这个解决方案,尽管它并不完全是“在列表视图之外”,它只是“其他视图”
public View onCreateView(...) {
rootView = inflater.inflate(...);
View clickView = rootView.findViewById(...);
clickView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Do something here
}
});
return rootView;
}