我有一个ListView
,它将ViewPager
显示为行元素。我想使用OnItemClickListener
,但ViewPager
会阻止调用onItemClick
。我怎么能这样做?
答案 0 :(得分:0)
有趣的设置。问题是ViewPager从实际的列表元素中“偷走”了焦点。
最初返回列表项视图时(例如在ListAdapter中),请在该视图上调用setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS)
。
或者,将其直接添加到list元素的XML布局中:android:descendantFocusability="blocksDescendants"
此问题描述&已找到解决方案here。
答案 1 :(得分:0)
使用mViewpager.requestDisallowInterceptTouchEvent(false);
禁止ViewPager拦截ListView中的事件。
答案 2 :(得分:-1)
您可以使用自定义ListView实现,例如我在这里的答案:[{3}}
答案 3 :(得分:-2)
您的设置听起来相当混乱,但听起来您想要的是一种监控ViewPager页面更改的方法,在这种情况下您将使用以下
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//actions
}
@Override
public void onPageSelected(int position) {
//actions
}
@Override
public void onPageScrollStateChanged(int state) {
//actions
}
});
从听起来像onPageSelected听起来就像是你最好的选择,你可以使用它来获得当前选择的页面索引。
但是,如果您想在列表视图中的项目被选中时获得,则需要这样的内容。
ListView listview;
listview.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//on item selected here
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//never had to implement personally
}
});