2010-12-23 4 views
0

J'ai une vue personnalisée, DisView (Contexte, bitmap), à laquelle je veux ajouter un LongCLickListener.Android OnLongClickListener numéro

La vue est affichée une fois que vous avez cliqué sur un autre élément.

public void onClick(View view) { 
    ... 
    RelativeLayout toplayout = new RelativeLayout(this); 
    setContentView(toplayout); 

    Bitmap bmp2 = BitmapFactory.decodeResource(getResources(), R.drawable.tag3); 

    tag3 = new DisView(this,bmp2); 
    tag3.setOnLongClickListener(this); 

Je dois ajouter que l'origine de l'activité de contentView est réglé sur un LinearLayout, mais sur un bouton clique dessus, setContentLayout() fait un relativelayout la nouvelle mise en page.

Ensuite, je fait la méthode onLongClick (méthode de l'activité, la mise en œuvre onlongclicklistener):

@Override 
public boolean onLongClick(View view) { 

    moveTag(view); 
    return true; 
} 

moveTag() est une TranslateAnimation très simple. Je n'ai aucune idée de pourquoi ça ne marche pas. J'ai le sentiment que c'est peut-être parce que j'ai changé la disposition.

+0

Qu'est-ce que "ne fonctionne pas" exactement? En fonction de votre code, vous n'ajoutez pas votre DisView à votre table de lecture ... –

+0

Désolé, dans ma copie précédente rush job l'addView() a été perdu. Ça fonctionne bien. Tag3 se déplace à travers l'écran comme je l'ai prévu. C'est juste que je ne peux pas le faire à long terme. J'ai fait la bonne chose et j'ai commencé une nouvelle activité pour cette animation. Mais le même problème s'applique. Longclick refuse juste de travailler. –

Répondre

0

Avez-vous pensé à ViewSwitcher pour modifier votre présentation affichée?

Jonathan

+0

Je l'ai essayé, mais il semblait causer plus de problèmes que de résoudre. Merci pour l'aide. J'ai décidé juste de faire une nouvelle activité et de mettre la deuxième disposition en tant que mise en page de base pour cela. Il n'a pas vraiment résolu mon problème onlongclick cependant. –

0

si toplayout est un LinearLayout et vous écrivez RelativeLayout toplayout = new RelativeLayout (this); le logiciel se bloque généralement au démarrage (ou lorsque cette vue est activée), si ce que vous rencontrez est le logiciel se bloque une fois qu'il a commencé (ou lorsque vous démarrez cette activité), il est fort possible que le problème soit causé par cette déclaration .

0

Dans votre exemple, vous avez fait ceci:

tag3.setOnLongClickListener(this); 

Pourquoi avez-vous fait cela?

setOnLongClickListener prend un paramètre de type OnLongClickLIstener. Quelque chose comme:

tag3.setOnLongClickListener((OnLongClickListener) keyHdlr); 

où keyHdlr ressemble à ceci:

OnLongClickListener keyHdlr = new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        Log.d("long", "backspace phone land long clicked!!!!!!"); 
        return false; 
       } 
      };