我有一个活动,里面有一个列表片段。如果我没有收到列表的元素,我想在整个布局上添加一个onclick监听器来重试请求。 活动布局 relative_browse :
<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>
然后在片段的onCreateView里面我膨胀 fragment_list_categoriers.xml :
<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>
我尝试在onActivityCreated内的空列表中添加onclick侦听器,但它不起作用:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
View view = container.findViewById(R.id.fragment_list_categories);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.w("DEBUG", "Click!");
}
});
}
特别是我没有“点击”日志,除了左边屏幕的一个小边框(就像fragment_list_categories覆盖除了一些像素之外的所有屏幕一样)。 什么是正确的方法?
编辑:这是我的 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!");
}
答案 0 :(得分:2)
突然出现的第一件事是ListView
占据了所有空间。
由于您将其高度设置为match_parent
,因此它将始终占据整个父级的空间。如果列表为空,则可能不是所需的行为。
ListViews有时会将点击传播到其父视图。当你点击它时,它可能只是死在那里而不是上升链。这可以解释为什么你可以获得“边界”的点击;它只是父视图的填充。
您可以考虑将ListView
身高更改为wrap_content
。这样,如果它是空的,它不会占用空间,你可以获得点击。
如果它实际上是空的,您可能还想尝试检测。如果您有几个条目没有占据父级的整个高度,那么如果用户单击“空”区域,预期的行为是什么?如果这也应该触发重试,那很好。如果没有,您需要根据它启用/禁用点击。
答案 1 :(得分:0)
你应该做的第一件事就是在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代码。