11
votes

Prévenir la goutte de traînée de mimetype personnalisé à editext

J'ai un type MIME personnalisé que j'avais l'intention d'utiliser pour glisser et déposer des objets d'application dans l'application. Cela semble fonctionner mais je constate que les champs EditText acceptent également l'action de chute. Je ne veux pas que cela se produise.

Tout d'abord, j'ai défini le type de MIME Custome comme celui-ci: xxx

alors, dans le gestionnaire d'AOUTUNT pour l'objet source pour l'objet source J'ai: xxx

lorsque je "déposer" sur un widget editext, il insère "inutilisé" dans la zone de texte. Comment puis-je empêcher cela? Merci.


4 commentaires

Avez-vous trouvé la réponse à cela?


Pas encore. Je l'ai laissé assis, espérant que je trébuche sur quelque chose ou avoir une réponse :)


Des solutions encore? Avoir le même problème et ne peut pas comprendre la solution.


Ce que j'ai fait: Tout d'abord, j'ai mis en œuvre la mise en œuvre d'événement de Drag pour la vue parent de EditText et, sur le premier appel, je définis pour editext activé , concentre < / code> et actif à false et, magie arrive - eittext reçoit la chute pour la première fois et ne reçoit pas pour tous les prochains fois. Qu'est ce que ça pourrait être?


4 Réponses :


3
votes

J'ai rencontré un problème similaire en ce que je ne voulais pas qu'une mise en page accepte l'action de goutte.

Attachez un écouteur de glisser à votre champ d'édition via le Setondraglistener. P>

class MyDragListener implements OnDragListener {

    @Override
    public boolean onDrag(View v, DragEvent event) {

      switch (event.getAction()) {
         case DragEvent.ACTION_DROP:
             //check whether it has been dropped onto your edit text
              if(v!=edtText)
                  //your code here
    }


4 commentaires

Merci. Je vais essayer cela quand je reviens à cette partie de mon application. J'appellerais cela un bug dans le widget editext, mais votre solution de contournement semble bonne.


Cela n'a pas travaillé pour moi. En fait, je pense que ce comportement n'est pas causé à l'événement DROP, mais par l'événement de pâte. Je pense que parce que vous avez besoin clipdata pour copier / coller, et cette attente de comportement est très similaire. Maintenant, je pense à la façon de voir la différence entre ces deux événements.


Je n'ai jamais eu pour essayer cela. Au lieu de cela, j'ai fini par mettre en œuvre ma propre glisser-pression minimale. Comme j'avais des besoins spéciaux comme le défilement tout en faisant glisser (et aussi nécessaire pour éviter le problème du sujet), j'ai décidé qu'il était plus facile de commencer à partir de zéro. Il y avait des aspects difficiles à mettre en œuvre Drag & Drop, mais il s'est avéré super!


@Perihartman hah, j'ai eu le même problème avec le défilement, je l'ai mis en œuvre par moi-même. De plus, j'ai presque corrigé un bug avec eittext prend des événements de goutte, mais très sale: /



1
votes

Vous pouvez écrire xxx

juste après avoir appelé startdrag () et restaurer les anciennes valeurs pour ce editext après < Code> dragevent.action_drag_DraG_DraG_ReRag_ReD

Mais, honnêtement, c'est une approche assez sale.


0 commentaires

9
votes

J'ai rencontré le même comportement. J'ai trouvé la raison, située dans la classe TextView.

La méthode ondragevent (événement de drague) est dépassée ici et semble ci-dessous. P>

@Override
public boolean onDragEvent(DragEvent event) {
    return false;    
}


1 commentaires

Vous pouvez avoir la bonne solution. Je ne vais pas essayer moi-même (dans un avenir proche, de toute façon). Il serait grand que quelqu'un d'autre puisse trimer et vérifier cela fonctionne. Merci pour le grand post!



1
votes

retourne TRUE Si l'événement Drag a été traité avec succès, ou faux si l'événement de Drag n'a pas été traité. Notez que FALSELL déclenchera la vue pour appeler son gestionnaire Ondragevent ().

Ceci est la déclaration des documents de l'ONDRAG (View V, Event Drragevent). Donc, si vous retournez de faux, l'événement est traité par ONDRAGEvent () de EditText. D'où les solutions les plus simples sont les solutions les plus simples: xxx

Si vous souhaitez effectuer certaines fonctions, spécifiez en fonction de l'événement de glisser et ils seront exécutés.


3 commentaires

Sauf si je sousclasse Edittext, je n'ai aucun contrôle sur son ondiraglistener. Ou avez-vous eu autre chose en tête?


Ne définit pas un lessouilleur de glace remplace la mise en œuvre par défaut?


Oui, je pense que ça le ferait. Mais alors vous perdez la fonctionnalité par défaut. Peut-être que ce ne serait pas si difficile de réimplément - pas sûr.