3

我有一个ListViewViewPagers 显示为行元素的。我想使用一个OnItemClickListener,但ViewPager阻止onItemClick被调用。我怎样才能做到这一点?

4

4 回答 4

0

用于mViewpager.requestDisallowInterceptTouchEvent(false);禁止 ViewPager 拦截来自 ListView 的事件。

于 2013-03-18T09:43:08.180 回答
0

有趣的设置。问题是 ViewPager 从实际列表元素中“窃取”了焦点。

当最初返回您的列表项视图时(例如在您的 ListAdapter 中),调用setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS)该视图。

或者,将其直接添加到列表元素的 XML 布局中:android:descendantFocusability="blocksDescendants"

此问题描述和解决方案已在此处找到。

于 2013-03-15T14:40:19.383 回答
-1

您可以使用自定义 ListView 实现,如我在此处的答案中的实现:https ://stackoverflow.com/a/40051801/425238

于 2016-10-14T20:53:15.363 回答
-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
    }
});
于 2013-03-15T14:23:56.943 回答