2011-07-18 6 views
34

Je travaille avec un ListFragment et je fais un onListItemClick. Tout fonctionne très bien, mais maintenant je veux utiliser un long article Cliquez (par exemple setOnItemLongClickListener (nouveau OnItemLongClickListener() pour une activité). Comment puis-je utiliser dans mon fragment?Long clic sur ListFragment

Merci!

+3

J'ai trouvé le chemin: getListView(). SetOnItemLongClickListener (nouveau OnItemLongClickListener() { \t \t \t @Override \t \t \t onItemLongClick public boolean (AdapterView paramAdapterView, \t \t \t Voir paramView, position int, long paramLong) {// TODO renvoie true; } }); – tsync

Répondre

58

Oui, la solution . posté par tsync fonctionne pour moi j'avais aussi couru en même problème et a estimé que ce n'est pas possible, j'essayé la suggestion ci-dessus comme suit:.

public class ProjectsFragment extends ListFragment { 

@Override 
public void onActivityCreated(Bundle savedState) { 
    super.onActivityCreated(savedState); 

    getListView().setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      Toast.makeText(getActivity(), "On long click listener", Toast.LENGTH_LONG).show(); 
      return true; 
     } 
    }); 

et il a travaillé

+0

et cela a fonctionné pour moi aussi. – danny117

+1

est-ce important si nous revenons vrai ou faux? @ Narayanan – Manny265

+1

@ Manny265 retour faux va exécuter l'écouteur onclick, retour vrai empêche cela –

11

cela fonctionne pour moi

!
getListView().setOnItemLongClickListener(new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) { 
     //Get your item here with the position     
     return true; 
    } 
}); 
+0

c'est mieux répondre – danny117

+3

Ce code doit aller dans 'onViewCreated' dans le fragment – Flexicoder

13

Selon ce que vous voulez vous réaliser pouvez utiliser les méthodes données pour surplombantes contexte:

Enregistrez d'abord la classe View qui obtient longtemps pressé (dans votre classe Fragment):

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    registerForContextMenu(this.getListView()); 
} 

Que l'implémentation de ces deux méthodes, pour créer un menu contextuel et faire ce que vous voulez quand un élément de menu est cliqué:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 

    MenuInflater inflater = this.getActivity().getMenuInflater(); 
    inflater.inflate(R.menu.my_context_menu, menu); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 

     case R.id.add: // <-- your custom menu item id here 
      // do something here 
      return true; 

     default: 
      return super.onContextItemSelected(item); 
    } 
} 
+4

Nice! Je veux juste ajouter que vous ne pouvez pas combiner registerForContextMenu avec setOnItemLongClickListener. Peut être évident pour certains, mais pas pour moi. Aussi, il est bon de savoir que l'identifiant de ligne peut être récupéré à partir de info.id – Toydor

+0

Aujourd'hui, la première fois, j'ai augmenté chaque réponse parce que c'était ce que j'allais faire avec l'événement longclick. – danny117