2016-04-22 3 views
3

J'ai vue qui commence d'abord comme celui-ci dans le xml:Android: Comment définir par programmation longclickable d'une vue à true tout en gardant son false cliquable?

<ImageButton 
      android:layout_width="64dp" 
      android:layout_height="64dp" 
      android:id="@+id/likeBtn" 
      android:src="@drawable/like" 
      android:onClick="like" 
      android:longClickable="true" 
      android:clickable="true" /> 

et j'ai déjà un setOnLongClickListenter dans le OnCreate de MainActivity, comme ceci:

likeBtn.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       showExtraLike(v); 
       return true; 
      } 
     }); 

Mon problème est:

quand je lance un code comme ça

likeBtn.setClickable(false); 
likeBtn.setLongClickable(false); 

/* some other code here */ 

likeBtn.setLongClickable(true); 

J'ai trouvé que la vue devient aussi cliquable !!

J'ai besoin pour être SEULEMENT LongClickable et PAS cliquable pendant quelque temps que je vais à nouveau les deux après activer quelques lignes dans le code.

Notes:

  • les deux et les désactivation permettant fonctionne à nouveau bien.
  • La désactivation de LongClick uniquement et son activation fonctionnent à nouveau correctement.
  • Mon seul problème est que le paramètre clickable to false semble inefficace quand longClickable est vrai!
+0

s'il vous plaît poster votre activité ici – sushildlh

+0

vous définissez longclickable à vrai sur certains événements? –

+0

Dites-nous la situation lorsque vous voulez définir true et quand false –

Répondre

0

J'ai trouvé une solution de contournement.

cliquable et longClickable en XML sont tous deux à true:

<ImageButton 
       android:layout_width="64dp" 
       android:layout_height="64dp" 
       android:id="@+id/likeBtn" 
       android:src="@drawable/like" 
       android:clickable="true" 
       android:longClickable="true"/> 

mais j'enlevé tous les setClickable et setLongClickable du MainActivity et fait ce qui suit dans le onCreate pour les faire ne rien faire dans certains cas:

// setting click listener for question button 
     likeBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (var == 1 || var == 3 || var == 4); 
        // do nothing 

       else 
        like(v); 
      } 
     }); 

     // setting longclick listener for question button 
     likeBtn.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       if (var == 1 || var == 2 || var == 4) 
        likeBtn.setHapticFeedbackEnabled(false); 

      else{ 
       likeBtn.setHapticFeedbackEnabled(true); 
       showExtraLike(v); 
      } 

       return true; 
      } 
     }); 

Et cela fonctionne!

mais, bien sûr, lorsque le longClick agit comme désactivé, il faisait encore vibrer l'appareil ... c'est pourquoi j'ai ajouté setHapticFeedbackEnabled.

1

Il suffit de définir onlongclicklistener comme ceci:

likeBtn.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
        //do something 
        return true; 
      } 
     }); 

Espérons que cela vous aide

+0

J'ai mis à jour ma question. –

+0

Pouvez-vous montrer le code complet –

+0

Je souhaite, mais je ne devrais pas. –

0

d'abord activer le longclickable et ajoutez le positionnement onlongclicklistener

likeBtn.setLongClickable(true); 

likeBtn.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       return true; 
      } 
     }); 
+0

J'ai mis à jour ma question. –

0

Votre problème est que vous appelez la méthode de clic pour l'activité de votre xml. supprimer cette lineand mis initialement à la fois false si vous voulez activer ou désactiver les clics .. remplacer votre code xml avec

<ImageButton 
    android:layout_width="64dp" 
    android:layout_height="64dp" 
    android:id="@+id/likeBtn" 
    android:src="@drawable/common_ic_googleplayservices" 
    android:longClickable="false" 
    android:clickable="false" /> 

maintenant dans votre override activité méthodes OnClick et onLongClick.

findViewById(R.id.likeBtn).setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      Toast.makeText(MainActivity.this,"like long clicked",Toast.LENGTH_SHORT).show(); 
      return false; 
     } 
    }); 

    findViewById(R.id.likeBtn).setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      Toast.makeText(MainActivity.this,"like long clicked",Toast.LENGTH_SHORT).show(); 
      return false; 
     } 
    }); 

    findViewById(R.id.likeBtn).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
    // Call LOGIN(); 
      Toast.makeText(MainActivity.this,"like clicked",Toast.LENGTH_SHORT).show(); 
     } 
    }); 

maintenant, vous pouvez activer et désactiver partout de l'activité. J'espère que cela t'aides. :)

+0

Je pensais que c'était proche, mais ça n'a pas marché. –

+0

si vous ne l'appelez pas à partir de votre xml alors ça devrait fonctionner, je l'ai essayé sur mon ordinateur portable – Newbiee