IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

OnItemLongClickListener trop long. Comment raccourcir ce temps ?


Sujet :

Android

  1. #1
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut OnItemLongClickListener trop long. Comment raccourcir ce temps ?
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
         * 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

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Ce temps est codé en dur dans la méthode getLongPressTimeout de la classe android.view.ViewConfiguration. Je suppose qu'en redéfinissant (override) cette méthode on doit pouvoir customiser ce temps.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    Le problème c'est que mes vues n'utiliseront pas ma classe héritée de ViewConfiguration, donc je peux pas changer le temps de cette façon à mon avis. J'ai trouvé une autre solution. J'ai utilisé un custom adapter pour ma liste pour pouvoir écouter chaque item, et j'ai créé un listener onLongCustomItemClick avec le pattern observer.

    code du getView de l'adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     @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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Séquence] Trop long - Comment presenter
    Par megamario dans le forum Autres Diagrammes
    Réponses: 10
    Dernier message: 16/03/2010, 18h42
  2. Réponses: 5
    Dernier message: 12/05/2006, 11h45
  3. [Conversion]Comment faire pour couper un Double trop long?
    Par dessinateurttuyen dans le forum Général Java
    Réponses: 1
    Dernier message: 13/11/2005, 02h22
  4. temp de réponse trop long
    Par maxidoove dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/10/2005, 18h24
  5. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo