Skartt Posté(e) 13 novembre 2013 Share Posté(e) 13 novembre 2013 Bonjour,J'utilise la drag and drop listview de ce tutoriel : Cette liste permet de déplacer ces items avec un long click sur ceux-ci. Voici le code : /** * Listens for long clicks on any items in the listview. When a cell has * been selected, the hover cell is created and set up. */ private AdapterView.OnItemLongClickListener mOnItemLongClickListener = new AdapterView.OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) { //code } }; Je cherche à rendre le délai du onItemClick plus court mais je ne vois pas comment faire. J'ai pensé à remplacer onItemLoncClick par onItemClick, mais là je dois cliquer deux fois pour bouger l'objet. Avez vous une idée ?Merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 13 novembre 2013 Share Posté(e) 13 novembre 2013 Bonjour, Je ne pense pas que ce soit paramétrable, le délai est fixé par le système, de façon à ce que le comportement soit le même quelle que soit l'application. Peut-être peux tu contourner cela en utilisant non pas on(Long)ItemClick, mais plutôt les touch events (onTouch); mais il te faudra tout gérer à la main... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skartt Posté(e) 13 novembre 2013 Auteur Share Posté(e) 13 novembre 2013 Je pense que c'est la seule solution en effet. Mais le problème c'est comment accéder à un item à partir de la listeView ? Il n'y a que trois listeners possibles pour les items : onItemLongClick, onItemSelect, et onItemClick. onTouch ne peut s'appliquer qu'à la vue principale (la listview) Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 13 novembre 2013 Share Posté(e) 13 novembre 2013 Je pense que, si tu veux attacher un onTouchListener sur un item de la liste, il faut que tu passes par un Adapter custom, qui te permettra de gérer le cycle de vie des vues des items, et notamment d'y attacher un listener Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skartt Posté(e) 13 novembre 2013 Auteur Share Posté(e) 13 novembre 2013 Okey je vais essayer ça je redonne des nouvelles plus tard merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Skartt Posté(e) 14 novembre 2013 Auteur Share Posté(e) 14 novembre 2013 Ca a bien marché, j'ai créé un listener avec le pattern observer et un custom adapter. Voilà le code du getiew de l'adapter : @Override public View getView(int pPosition, View pConvertView, ViewGroup pParent) { ViewHolder holder = null; final int posCopy = pPosition; if (pConvertView == null) { LayoutInflater inflater = listViewDraggingAnimation.getLayoutInflater(); pConvertView = inflater.inflate(R.layout.text_view, null); holder = new ViewHolder(); holder.tvTitle = (TextView) pConvertView.findViewById(R.id.title); pConvertView.setOnTouchListener(new OnTouchListener() { boolean mHasPerformedLongPress; Runnable mPendingCheckForLongPress; @Override public boolean onTouch(final View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: if (!mHasPerformedLongPress) { // This is a tap, so remove the longpress check if (mPendingCheckForLongPress != null) { v.removeCallbacks(mPendingCheckForLongPress); } // v.performClick(); } break; case MotionEvent.ACTION_DOWN: if (mPendingCheckForLongPress == null) { mPendingCheckForLongPress = new Runnable() { public void run() { updateOnItemCustomLongClickListener(); } }; } mHasPerformedLongPress = false; v.postDelayed(mPendingCheckForLongPress, timeForLongClick); break; case MotionEvent.ACTION_MOVE: final int x = (int) event.getX(); final int y = (int) event.getY(); // Be lenient about moving outside of buttons int slop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop(); if ((x < 0 - slop) || (x >= v.getWidth() + slop) || (y < 0 - slop) || (y >= v.getHeight() + slop)) { if (mPendingCheckForLongPress != null) { v.removeCallbacks(mPendingCheckForLongPress); } } break; default: return false; } return false; } }); pConvertView.setTag(holder); pConvertView.setTag(R.id.title, holder.tvTitle); } else { holder = (ViewHolder) pConvertView.getTag(); } holder.tvTitle.setText(optionList.get(pPosition).getTitle()); return pConvertView; ici updateOnItemCustomLongClickListener(); correspond à l'update de l'observer qui exécute ce qu'il devait se faire normalement avec un longClick. timeForLongClick est l'entier qui correspond au temps du long click. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.