我有一个列表视图,在其中我有一个视图寻呼机,你可以在下面的代码中看到。 虽然viewPager在项目视图中,但List不接受onItemClickListener,当我单击Items时没有任何反应。
我找到的一个解决方案是将onClickListener添加到ViewPager页面,但我认为这不是一个好的解决方案,因为如果列表包含100个项目,并且每个项目都有一个包含5个页面的视图寻呼机,那么我应该定义500个侦听器而不是一个倾听者。
我尝试了所有搜索过的解决方案,例如更改了根视图的可聚焦或可点击属性。
请与我分享您的建议。
这是列表项布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/propertylist_item_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/purple"
android:paddingBottom="1dp"
android:descendantFocusability="blocksDescendants" >
<!-- background slider -->
<android.support.v4.view.ViewPager
android:id="@+id/property_images_view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- favorite icon -->
<ImageButton
android:id="@+id/favorite_button"
android:contentDescription="@string/favorite_button_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@android:color/transparent"
android:layout_margin="10dp"
android:src="@drawable/ic_favorite" />
...
<!-- Some other tags -->
这是列表适配器代码:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
if (view == null)
{
LayoutInflater inflater;
inflater = LayoutInflater.from(getContext());
view = inflater.inflate(R.layout.property_listing_item, parent, false);
}
RPropertyStorage property = getItem(position);
if (property != null)
{
PropertyListingImagesAdapter adapter = new PropertyListingImagesAdapter(property.getImages());
ViewPager imagesPager = (ViewPager) view.findViewById(R.id.property_images_view_pager);
imagesPager.requestDisallowInterceptTouchEvent(false);
imagesPager.setAdapter(adapter);
}
return view;
}
ListView的OnItemClickListener:
list.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
RToast.getInstance().showMessage("Clicked");
RLog.info("Clicked");
}
});
答案 0 :(得分:0)
ViewPager具有非常“强大”的代码来处理触摸事件。对我来说,这只是通过它自己的clicklisteners捕获viewpager点击的一种方式。
不关心
如果您列出包含100个项目,并且每个项目都有一个包含5个页面的视图寻呼机,那么我应该定义500个Listener而不是一个Listener。
因为listview只创建了同时可以在屏幕上显示的视图+ 2;您可以通过适配器中的此类代码进行检查
int count=0;
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
if (view == null)
{
LayoutInflater inflater;
inflater = LayoutInflater.from(getContext());
view = inflater.inflate(R.layout.property_listing_item, parent, false);
Log.v("","creating "+count);
count++;
}
//your code
}
监听器只是链接。无论你在某种方法上有多少链接。只需检查它是否为空。