2011-03-31 2 views
1

J'utilise le code suivant pour lister quelques éléments de tableau, tandis que le défilement des éléments de la liste est ajouté plus avec les mêmes données de sortie dans le tableau je ne sais pas quelle erreur j'ai faite.liste voir article répété dans android?

Tout le monde a souligné où j'ai fait l'erreur.

private static String array_spinner_subcategories[]; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     setContentView(R.layout.sub_categories); 

     setSubCat(); 

     ListView sub_categories=(ListView)findViewById(R.id.sub_catlist); 
     sub_categories.setAdapter(new EfficientAdapter(this)); 

     sub_categories.setAdapter(adapter); 
     sub_categories.setOnItemClickListener(subcatlistener); 

     cr=getContentResolver(); 
    } 
    public String[] setSubCat(){ 
     recordDB=new Viddatabase(this); 
     db=recordDB.getWritableDatabase(); 
     array_spinner_subcategories=recordDB.subcategoriesList(db); 
     recordDB.close(); 
     return array_spinner_subcategories; 
} 
    private OnItemClickListener subcatlistener = new OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position, 
    long id) { 
       System.gc(); 
       Toast.makeText(SubCategories.this,array_spinner_subcategories[position], 
         Toast.LENGTH_LONG).show(); 

     } 
    }; 

    private static class EfficientAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 

     public EfficientAdapter(Context context) { 
     mInflater = LayoutInflater.from(context); 

     } 

     public int getCount() { 
     return array_spinner_subcategories.length; 
     } 

     public Object getItem(int position) { 
     return position; 
     } 

     public long getItemId(int position) { 
     return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
     System.gc(); 
     ViewHolder holder; 

     if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.albumlist, null); 
     holder = new ViewHolder(); 

     holder.subCategories = (TextView) convertView.findViewById(R.id.albumDetails); 
     holder.subCategories.setText(array_spinner_subcategories[position]); 


     convertView.setTag(holder); 
     } else { 
     holder = (ViewHolder) convertView.getTag(); 
     } 


     return convertView; 
     } 

     static class ViewHolder { 

     TextView subCategories; 



     } 

     } 

Répondre

2

Déplacer la ligne holder.subCategories.setText(array_spinner_subcategories[position]); dans getView() méthode ci-dessous le bloc else

+0

Thanks.now son beau travail. – Karthi

1

Dans votre méthode getView, vous ne définissez des données dans la vue que lorsque vous créez une nouvelle vue. Le ListView recycle les vues, vous serez donc probablement passé dans une vue à réutiliser, ce qui explique pourquoi il est appelé convertview.

Vous devez appeler setText sur la vue à chaque fois que vous l'appelez. Dans le cas contraire, vous retournez la conversion sans modification et les mêmes valeurs sont répétées.