【发布时间】: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