Les éléments de la liste de la position de répéter dans getview
Je suis entrain de créer une liste personnalisée de vue à l'aide de baseadapter.j'ai 10 de l'élément de liste de ma liste.mon problème est que afetr 6 éléments ,les 4 premiers sont extensibles.je l'ai juste imprimé valeurs de position dans getview.il donne 0,1,2,3,4,5,6,7,8,9,0,1,2,3.Mon code est ci-dessous.
merci à l'avance
public class ProductListAdapter extends BaseAdapter implements OnClickListener{
/*
* developer :sanu
* date :10-4-2013
* time :3.34 pm
*/
public View row;
private String[] productName;
private String[] producttype;
private String[] priceRangeFrom;
private String[] priceRangeTo;
private String[] productImage;
private Activity activity;
private static LayoutInflater inflater=null;
static String posClicked;
ViewHolder holder;
Integer height1;
Integer width1;
Typeface tf;
Integer FirmaCount;
public ImageLoader imageLoader;
public ProductListAdapter(Activity a,String[] name,String[] type,String[] price_from,String[] price_to,String[] image,Typeface tf) {
activity = a;
productName = name;
producttype = type;
priceRangeFrom = price_from;
priceRangeTo = price_to;
productImage = image;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return productName.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public int getViewTypeCount (int position)
{
return position;
}
public static class ViewHolder{
public TextView nameProduct;
public TextView typeProduct;
public TextView priceRangeProduct;
public ImageView productImage;
public ImageView plusImage;
public RelativeLayout mainLayout;
public int position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = inflater.inflate(R.layout.product_list_details,parent, false);
holder=new ViewHolder();
holder.nameProduct =(TextView)convertView.findViewById(R.id.name);
holder.typeProduct =(TextView)convertView.findViewById(R.id.product);
holder.priceRangeProduct =(TextView)convertView.findViewById(R.id.pricerange);
holder.productImage =(ImageView)convertView.findViewById(R.id.image);
holder.plusImage =(ImageView)convertView.findViewById(R.id.dot);
holder.mainLayout = (RelativeLayout)convertView.findViewById(R.id.mainlayout);
holder.nameProduct.setText(productName[position]);
if(producttype[position].length()>18)
{
holder.typeProduct.setText(producttype[position].substring(0,18)+"...");
}
else
{
holder.typeProduct.setText(producttype[position]);
}
holder.priceRangeProduct.setText(priceRangeFrom[position].substring(0,priceRangeFrom[position].length()-2)+" To "+priceRangeTo[position].substring(0, priceRangeTo[position].length()-2));
imageLoader.DisplayImage(productImage[position], holder.productImage);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder)convertView.getTag();
}
holder.plusImage.setTag(Integer.toString(position));
holder.plusImage.setOnClickListener(this);
holder.mainLayout.setTag(Integer.toString(position));
holder.mainLayout.setOnClickListener(this);
return convertView;
}
déplacer ce
je suggère d'étendre ArrayAdapter au lieu de cela, puisque vous pouvez faire la même action, comme ci-dessus avec moins de considérations
holder.nameProduct.setText(productName[position]); if(producttype[position].length()>18) { holder.typeProduct.setText(producttype[position].substring(0,18)+"..."); } else { holder.typeProduct.setText(producttype[position]); }
en dessous de la dernière d'autre et d'essayerje suggère d'étendre ArrayAdapter au lieu de cela, puisque vous pouvez faire la même action, comme ci-dessus avec moins de considérations
OriginalL'auteur Sanu | 2013-11-09
Vous devez vous connecter pour publier un commentaire.
Cela sonne comme un cas de Vue de la re-cyclcing. Android va passer une pré-rempli vue de la méthode getView. Cela permet de minimiser la création de l'objet. Quand une ligne existante-vue est déroulée hors de l'écran, Android pourrait essayer de recycler ce point de vue pour afficher une ligne qui est maintenant à l'écran. Vous devez tenir compte du fait que ce point de vue peut avoir été utilisé pour afficher les données sur une autre ligne (qui est maintenant hors de l'écran).
Vous avez la ligne suivante
dans le conditionnel suivant:
Déplacer cette ligne en dehors de la réserve, et tout doit être bien.
OriginalL'auteur EJK
C'est comme EJK dit. Vous n'êtes pas de recyclage de votre point de vue correctement. Modifiez votre code pour le présent et avis où j'ai mis la setText appels
le défilement iget erreur sur cette ligne titulaire = (ViewHolder)convertView.getTag();
Quel type d'erreur?
11-09 15:17:39.757: E/AndroidRuntime(7145): FATAL EXCEPTION: les principaux 11-09 15:17:39.757: E/AndroidRuntime(7145): java.lang.ClassCastException: java.lang.La chaîne ne peut pas être lancé pour com.L'adaptateur.ProductListAdapter$ViewHolder 11-09 15:17:39.757: E/AndroidRuntime(7145): au com.L'adaptateur.ProductListAdapter.getView(ProductListAdapter.java:93)
11-09 15:17:39.757: E/AndroidRuntime(7145): au android.widget de.ListView.makeAndAddView(ListView.java:1792) 11-09 15:17:39.757: E/AndroidRuntime(7145): au android.widget de.ListView.fillDown(ListView.java:676) 11-09 15:17:39.757: E/AndroidRuntime(7145): au android.widget de.ListView.fillGap(ListView.java:640) 11-09 15:17:39.757: E/AndroidRuntime(7145): au android.widget de.AbsListView.trackMotionScroll(AbsListView.java:4901)
OriginalL'auteur Wang
Changer votre
getView
àÉgalement vérifier ce
Comment ListView du recyclage du fonctionnement du mécanisme de
quelle est l'erreur?
als pourquoi avez-vous besoin
public int position
en vue de titulaire?EXCEPTION FATALE: principaux java.lang.ClassCastException: java.lang.La chaîne ne peut pas être lancé pour com.L'adaptateur.ProductListAdapter$ViewHolder om.L'adaptateur.ProductListAdapter.getView(ProductListAdapter.java:87) sur android.widget de.AbsListView.obtainView(AbsListView.java:2063) android.widget de.ListView.makeAndAddView(ListView.java:1792) android.widget de.ListView.fillDown(ListView.java:676) 11-09 12:35:29.339: E/AndroidRuntime(4245): au android.widget de.ListView.fillGap(ListView.java:640)
désolé .....public int position n'avons pas d'utilisation ...
OriginalL'auteur Raghunandan
Changement getView()
Déclarer
ViewHolder
avantif (convertView == null)
EXCEPTION FATALE: principaux java.lang.ClassCastException: java.lang.La chaîne ne peut pas être lancé pour com.L'adaptateur.ProductListAdapter$ViewHolder om.L'adaptateur.ProductListAdapter.getView(ProductListAdapter.java:87) sur android.widget de.AbsListView.obtainView(AbsListView.java:2063) android.widget de.ListView.makeAndAddView(ListView.java:1792) android.widget de.ListView.fillDown(ListView.java:676) 11-09 12:35:29.339: E/AndroidRuntime(4245): au android.widget de.ListView.fillGap(ListView.java:640)
pouvez-vous me dire dans quelle ligne l'erreur de pointage. partager cette ligne de code.
titulaire = (ViewHolder) convertView.getTag();
OriginalL'auteur Amit Gupta