La réutilisation de vues en Android Listview avec différentes mises en page 2

J'ai appris que, pour maximiser l'efficacité avec Android listviews, vous ne devriez avoir que de nombreux gonflée " ligne de points de vue sont nécessaires pour s'adapter à l'écran. Une fois un point de vue a déplacé hors de l'écran, vous devez réutiliser dans votre getView méthode, vérifier si les convertView est null ou pas.

Cependant, comment pouvez-vous mettre en œuvre cette idée lorsque vous avez besoin de 2 différentes mises en page pour la liste? Permet de dire que ses une liste des commandes et les 1 la mise en page est pour les commandes effectuées et la disposition d'autres dans un processus de commandes.

Ceci est un exemple de tutoriel de l'idée que mon code est à l'aide. Dans mon cas, j'aurais 2 ligne les mises en page: R.layout.listview_item_product_complete et R.layout.listview_item_product_inprocess

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {
    holder = new ViewHolder();
    if(getItemViewType(position) == COMPLETE_TYPE_INDEX) {
        convertView = mInflator.inflate(R.layout.listview_item_product_complete, null);
        holder.mNameTextView = (TextView) convertView.findViewById(R.list.text_complete);
        holder.mImgImageView = (ImageView) convertView.findViewById(R.list.img_complete);
    }
    else { //must be INPROCESS_TYPE_INDEX
        convertView = mInflator.inflate(R.layout.listview_item_product_inprocess, null);
        holder.mNameTextView = (TextView) convertView.findViewById(R.list.text_inprocess);
        holder.mImgImageView = (ImageView) convertView.findViewById(R.list.img_inprocess);
    }
    convertView.setTag(holder);
} else {
    holder = (ViewHolder) convertView.getTag();
}
    thisOrder = (Order) myOrders.getOrderList().get(position);
    //If using different views for each type, use an if statement to test for type, like above
    holder.mNameTextView.setText(thisOrder.getNameValue());
    holder.mImgImageView.setImageResource(thisOrder.getIconValue());
    return convertView;
}

public static class ViewHolder {
    public TextView mNameTextView;
    public ImageView mImgImageView;
}
  • J'ai récemment rencontré ce problème moi-même. J'ai été à l'aide de 2 mises en page différentes pour remplir une listview et il a abouti à une anarchie totale. Je suis allé sur mon code encore et encore, mais ne peuvent travailler en raison de la mauvaise mise en page a été ré-utilisé. En fin de compte, j'ai décidé de rester avec une seule présentation par liste, mais fortement la modification de ce point de vue, basé sur le type d'élément. Il ya beaucoup que vous pouvez faire pour modifier des éléments dans le code.
InformationsquelleAutor jamis0n | 2012-11-08