2013-09-02 3 views
4

J'essaie d'utiliser la méthode OnItemClickListener dans un ListView mais il n'est pas appelé parce que ViewPager intercepte les événements tactiles.Utiliser OnItemClickListener dans ListView dans ViewPager

J'ai essayé

mPager.requestDisallowInterceptTouchEvent(false); 

dans mon FragmentActivity et

lista.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS); 

dans ma méthode onCreate dans ListFragment mais rien ne se passe. ("lista" est mon ListView).

est ici le code de la méthode 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 
    } 

}); 

Il y a quelques jours je ne Activities au lieu de Fragments (maintenant je besoin d'eux à cause de ViewPager) et le code a bien fonctionné, donc je pense que XML est pas nécessaire.

EDIT Ajouter plus de code:

FragmentActivity

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; 
    } 
} 

ListFragment

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; 

    } 

} 
+2

"J'essaie d'utiliser OnItemClickListenermethod dans un ListView mais il n'est pas appelé car ViewPagerintercepte les événements tactiles" - c'est plutôt improbable. Vous pouvez utiliser toutes sortes de widgets interactifs à l'intérieur d'un 'ViewPager', sans problèmes. – CommonsWare

+0

La structure normale doit avoir ViewPager dans MainActivity, puis ViewPager héberge différentes instances de fragment ou de fragment. Le onItemClickListener doit être défini à partir du fragment lui-même, pas de l'activité. Il ne devrait pas y avoir d'interférence du tout. –

+0

Mais si j'initialise mon ListView dans ma classe Fragment, pas dans FragmentActivity, comment puis-je y parvenir? – Lyd

Répondre

1

Je pense que le problème peut être causé par des éléments de ListView. Si vos éléments listView contiennent des vues cliquables (boutons, cases à cocher, etc.), votre OnItemClickListener ne sera pas appelé.

+0

C'est une ligne personnalisée avec deux 'TextView', et sans utiliser' Fragment', cela fonctionne. – Lyd

+3

Je pense que le problème est que vous utilisez 'ListFragment' en tant que parent de votre fragment. 'ListFragment' a sa propre méthode 'onListItemClick'. Essayez d'étendre Fragment à la place. – Serge

+1

J'utilise maintenant 'ListFragment' et sa propre méthode' onListItemClick' et cela fonctionne. Je vous remercie! – Lyd

Questions connexes