2011-10-19 3 views
0

Fondamentalement, je veux encapsuler un simple composant à partir du code que j'ai déjà.Création de composants personnalisés à l'aide de composants Android standard

Fondamentalement, c'est un LinearLayout avec des boutons à l'intérieur. Ces boutons vont apporter des modifications à un ListView, et il y a aussi d'autres petites choses qu'il fera.

Actuellement, j'ai une mise en page XML avec ceux-ci, et je configure par programme tout le reste: les boutons, l'interaction entre la liste et les autres petites choses.

Évidemment, j'ai pensé à moi-même, encapsulons ceci.

J'ai commencé en essayant d'étendre le LinearLayout et en ajoutant les boutons. Déjà Je ne sais pas comment gonfler les boutons pour ajouter à la vue Quelle méthode dois-je passer outre pour créer ces boutons juste avant le point de vue est créé sans déconner avec les mesures et inflations, etc.

J'ai regardé mais les composants personnalisés que je vois sont soit des composants complètement nouveaux soit des composants qui ajoutent simplement de petites fonctionnalités aux composants personnalisés.

Existe-t-il des instructions pour cela? Bons tutoriels/exemples?

Toute aide est appréciée. Merci !

EDIT:

Ok, voici un peu plus de choses spécifiques.

Fondamentalement, je veux créer un View qui contient des boutons de filtre pour un ListView. Cela sera utilisé dans différents endroits avec des filtres différents, j'ai donc besoin de flexibilité pour les boutons.

En fait, je voudrais faire quelque chose comme ceci:

CustomView view = new CustomView(activity); 
view.addButton("Lala", new OnFilterClickListener { 
    onClick(ListView list, View v) { 
     // Do the filtering 
    } 
}); 

mListView.addHeaderView(view); 

Je veux la vue de l'adapter est des poids pour montrer les boutons, montrer à l'utilisateur qui filtre est actif, des trucs comme ça.

Mais je ne sais toujours pas comment faire apparaître ces boutons dynamiquement ajoutés, où les générer, comment les gonfler et ce genre de choses.

+0

ajouter/gonfler tout le constructeur –

+0

si je veux ajouter des choses après la 'nouvelle CustomView() '? Le constructeur a été appelé, mais l'élément n'a pas encore été dessiné. – Draiken

+0

si elle étend un 'LinearLayout' vous pouvez toujours utiliser la fonction' addView' normalement –

Répondre

1
public class myLayout extends LinearLayout { 

    //... 

    public void addButton(String text, OnClickListener listener) { 
     Button newButton = new Button(mContext); 
     newButton.setText(text); 
     newButton.setOnClickListener(listener); 
     //Say we want the weights to be equal 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1); 
     addView(newButton, params); 
    } 

    //... 

} 

Vous pouvez même faire quelque chose à la vue avant d'envoyer le clic comme celui-ci:

public class myLayout extends LinearLayout { 

    //... 

    public void addButton(String text, final OnClickListener listener) { 
     Button newButton = new Button(mContext); 
     newButton.setText(text); 
     newButton.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
       //do whatever you want 
       //like change background of button or something 
       //finally 
       listener.onClick(v); 
      } 
     }); 
     //Say we want the weights to be equal 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1); 
     addView(newButton, params); 
    } 

    //... 

} 
+0

J'ai fini par faire exactement ce que vous avez dit avant de poser la question, mais j'ai continué à recevoir des erreurs. Je pensais que c'était ce code, mais c'était autre chose, haha ​​... Merci! – Draiken

Questions connexes