【问题标题】:Use OnItemClickListener in ListView inside ViewPager在 ViewPager 内的 ListView 中使用 OnItemClickListener
【发布时间】:2013-09-02 15:36:56
【问题描述】:

我正在尝试在 ListView 中使用 OnItemClickListenermethod,但它没有被调用,因为 ViewPagerintercepts 触摸事件。

我试过了

mPager.requestDisallowInterceptTouchEvent(false);

在我的FragmentActivity,和

lista.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);

ListFragment我的 onCreate 方法中,但没有任何反应。 (“lista”是我的ListView)。

这里是OnItemClickListener方法代码:

lista = (ListView) view.findViewById(id.list);

lista.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        //It's not being called
    }

});

几天前我只使用了Activities而不是Fragments(现在我需要它们,因为ViewPager)并且代码运行良好,所以我认为不需要xml。

编辑添加更多代码:

片段活动

public class TabsFacturasActivity extends SherlockFragmentActivity {

private static class MyAdapter extends FragmentPagerAdapter {

    private String[] titles = { "VER FACTURAS", "VER CONSUMO", "INTRODUCIR LECTURA" };
    private final FragmentManager mFragmentManager;
    private Fragment mFragmentAtPos0;

    public MyAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
        mFragmentManager = fragmentManager;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0: // Fragment # 0
            return new FacturasFragment();
        ...
        }
        return null;
    }

    @Override
    public int getCount() {
        return titles.length;
    }

    @Override
    public int getItemPosition(Object object)
    {
        if (object instanceof FacturasFragment && mFragmentAtPos0 instanceof DetallesFacturaFragment)
            return POSITION_NONE;
        return POSITION_UNCHANGED;
    }
}

列表片段

public class FacturasFragment extends ListFragment {

private ListView lista;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.activity_facturas, container, false);

        ...

        lista = (ListView) view.findViewById(id.list);

        lista.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
            //It's not being called
        }

        });

        return view;

    }

}

【问题讨论】:

  • “我正在尝试在 ListView 中使用 OnItemClickListener 方法,但它没有被调用,因为 ViewPager 拦截了触摸事件”——这不太可能。您可以在 ViewPager 中使用各种交互式小部件,没有问题。
  • 正常的结构是在MainActivity中有ViewPager,然后ViewPager承载不同的Fragment或者Fragment Instances。 onItemClickListener 应该从 Fragment 本身设置,而不是 Activity。根本不应该有干扰。
  • 但是如果我在我的Fragmentclass 中初始化我的ListView,而不是在FragmentActivity我怎样才能实现呢?
  • 我在我的问题中添加了更多代码。

标签: android listview android-listview android-fragments


【解决方案1】:

我认为问题可能是由 listView 项目引起的。如果您的 listView 项目包含可点击的视图(按钮、复选框等),您的 OnItemClickListener 将不会被调用。

【讨论】:

  • 这是一个自定义行,有两个TextView,不使用Fragment,它可以工作。
  • 我认为问题在于您使用“ListFragment”作为片段的父级。 'ListFragment' 有它自己的 'onListItemClick' 方法。尝试改为扩展 Fragment。
  • 我现在使用ListFragment 和它自己的onListItemClick 方法并且它有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多