Si vous disposez d'une disposition simple, vous pouvez remplacer votre composant ListView
par un LinearLayout
et programmer manuellement la fonctionnalité dont vous avez besoin pour ajouter/supprimer et cliquer sur les éléments qu'il contient.
Voici un exemple simple. refreshStudentList()
a pris la place de notifyDataSetChanged()
être appelé sur l'adaptateur, recentConnections
est un LinearLayout
et adapter
est une instance d'un Adapter
(Vous pouvez utiliser l'adaptateur que vous utilisez pour votre ListView
):
private void refreshStudentList() {
recentConnections.removeAllViews();
for(int i=0; i < adapter.getCount(); i++) {
View toAdd = adapter.getView(i, null, recentConnections);
final int position = i;
toAdd.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// onItemClick functionality here
}
});
recentConnections.addView(toAdd, new LayoutParams(LayoutParams.MATCH_PARENT,
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics())));
}
recentConnections.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
}
Comme vous pouvez le voir , au lieu d'un onItemClickListener
J'ai défini un écouteur onClick
à chaque élément de la liste. Cela pourrait facilement être changé pour être un écouteur onTouch
si vous vouliez implémenter l'apparence d'un clic sur un élément de la liste (en changeant l'arrière-plan de la vue sur MotionEvent.ACTION_DOWN
et MotionEvent.ACTION_UP
).
L'autre chose que vous devez noter est que j'ai codé en dur une valeur dp pour la hauteur de chaque valeur (50dp
dans ce cas). Lorsque vous créez et gonflez des vues par programme, elles n'ont pas de valeur "height", donc "wrap_content" devient 0.
également, notifyDataSetChanged()
sur votre carte ne fera rien. Comme je l'ai dit, c'est une solution simple, mais c'est le début de la construction de votre propre composant personnalisé ExtendingListView si c'est ce que vous voulez.
J'ai donc une vue très complexe au dessus de mes listes. Tout est-il défini dans une vue xml, comment pourrais-je ajouter ces composants dans le MergeAdapter? Devrais-je créer tous mes contrôles lors de l'exécution? ou comment dois-je aller à ce sujet? – Jared
Définir un fichier XML de mise en page avec les choses qui devraient aller dans le 'ListView' avant le contenu de votre adaptateur habituel. Gonflez cela à l'exécution en utilisant 'getLayoutInflater(). Gonflez()'. Ajoutez ce 'View' au' MergeAdapter', puis ajoutez votre habituel 'Adapter'. Puis placez le 'MergeAdapter' dans le' ListView'. Une fois que vous avez ce travail, étendez le 'MergeAdapter' pour remplacer les méthodes appropriées pour indiquer que votre première" ligne "n'est pas sélectionnable/cliquable. – CommonsWare