0

J'essaie d'utiliser la classe MergeAdapter de CommonsWare et j'ai un succès limité. En particulier, je ne suis pas sûr si 1) mon ArrayAdapter est approprié pour l'utilisation, 2) si je l'ajoute correctement, et 3) si je fais tout ce qui est nécessaire pour tout câbler.Est-ce que ArrayAdapter est utilisable avec CommonsWare MergeAdapter? Si oui, pourquoi cela ne fonctionne-t-il pas?

Voici ma sous-classe de ArrayAdapter:

class PDLAdapter extends ArrayAdapter<PartnerDisease> { 

    public PDLAdapter(final Context context) { 
     super(context, 0); 
    } 

    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 
     ViewHolder viewHolder; 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.partnerdisease_list_item, null); 
      viewHolder = new ViewHolder(convertView); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     viewHolder.populateViews(getItem(position)); 

     return convertView; 
    } 

} 

Voici mon objet StructuredSubDisease (le nom n'a pas de sens si l'on considère en réalité il est un objet de niveau supérieur contenant des sous maladies, mais peu importe):

class StructuredSubDisease { 
    public String headingText; 
    public ArrayList<PartnerDisease> subDiseases; 

    public View headingView() { 
     View returnView = mInflater.inflate(R.layout.partnerdisease_list_item, null); 
     TextView t = (TextView) returnView.findViewById(R.id.tv_displayname); 
     t.setText(headingText); 
     return returnView; 
    } 
} 

... et c'est là que la "magie" est supposée se produire.

  for (StructuredSubDisease s : subDiseaseList) { 
       mMergeAdapter.addView(s.headingView()); // @Alex, <--- thing 1 

       PartnerDiseaseListAdapter adapter = new PartnerDiseaseListAdapter(this); 

       for (PartnerDisease p : s.subDiseases) { 
        adapter.add(p); 
       } 

       mMergeAdapter.addAdapter(adapter); // <--- and thing 2 
      } 

Je Log Ged le comte:

Log.i("mergecount", "" + mMergeAdapter.getCount()); 

Ce retour 1, où je me attends 2.

EDIT: J'ai oublié de mentionner, le résultat est que le headingView() est affiché avec le bon titre, mais il n'y a pas de liste en dessous.

Où est-ce que je me trompe?

+0

Pourquoi attendez-vous 2? –

+0

@Alex, parce que j'ai ajouté deux choses - le 'headingView()' (qui est rendu) et le 'adapter' (qui échoue silencieusement). –

Répondre

1

mon ArrayAdapter est adapté à une utilisation

Il semble OK.

si j'ajoute correctement

Il semble OK.

si je fais tout ce qui est nécessaire pour tout câbler

Vous n'avez pas encore de maladies, apparemment.

parce que j'ajouté deux choses - la headingView() (qui est rendu) et l'adaptateur (qui échoue silencieusement)

getCount() retourne le nombre de lignes au total qui devrait être dans votre ListView, non le nombre de choses ajoutées au MergeAdapter. Dans votre cas, il semblerait que vous n'avez pas de maladie. Commencez par mettre votre PartnerDiseaseListAdapter directement dans votre ListView, en ignorant le MergeAdapter. Ça fonctionne. Ensuite, revenez au MergeAdapter.

+0

Merci, vous avez raison. Le problème était la liste. Idiot de moi de ne pas vérifier.Y at-il une méthode disponible pour obtenir le nombre de vues + adaptateurs ajoutés à votre 'MergeAdapter' ou est-ce quelque chose qui ne serait généralement pas utile? –

+0

@ jshin47: Je n'ai pas de méthode pour obtenir le compte des pièces ajoutées, car je n'ai pas vu ou entendu parler d'un besoin. Si vous avez un scénario concret, déposez un problème sur le projet. C'est trivial à ajouter, mais j'aime garder une API légère. – CommonsWare

Questions connexes