34 votes

Cliquez longuement sur ListFragment

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

Merci!

59voto

Narayanan Points 593

Oui, la solution publiée par tsync fonctionne pour moi. Moi aussi, je suis tombé sur le même problème et j'ai considéré que ce n'était pas possible. J'ai 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 ça a marché!

13voto

elton Points 1706

Selon ce que vous voulez réaliser, vous pouvez utiliser les méthodes données pour les menus contextuels:

Enregistrez d'abord la classe View qui est pressée longuement (à l'intérieur de votre classe Fragment):

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

    registerForContextMenu(this.getListView());
}
 

Ensuite, implémentez ces deux méthodes, pour créer un menu contextuel et faire ce que vous voulez quand vous cliquez sur un élément de menu:

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

11voto

NathofGod Points 211

Ça marche 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;
    }
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X