ListView中的ViewPagers:onItemClickListener

时间:2013-03-15 14:19:07

标签: android

我有一个ListView,它将ViewPager显示为行元素。我想使用OnItemClickListener,但ViewPager会阻止调用onItemClick。我怎么能这样做?

4 个答案:

答案 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
    }
});