Voce di elenco che si ripetono in android personalizzato listview

Nel mio elenco personalizzato di visualizzare gli elementi sono ricorrenti.posizione della voce è la stessa per tutti di voce.
il codice è sotto

ListAdapter.java-

    public class ListAdapter extends BaseAdapter{

    private List<String> mName;
private List<Drawable> mIcon;
private Context mContext;

public ListAdapter(Context mContext, List<String> Name, List<Drawable> Icon) {
    this.mContext=mContext;
    this.mName=Name;
    this.mIcon=Icon;
}

@Override
public int getCount() {
    //TODO Auto-generated method stub
    return mName.size();
}

@Override
public Object getItem(int position) {
    //TODO Auto-generated method stub
    return position;
}

@Override
public long getItemId(int position) {
    //TODO Auto-generated method stub
    return position;
}

@Override
public View getView(final int position, View v, ViewGroup parent) {

    View mLayout;
    TextView mText;
    ImageView mImage;
    CheckBox mCheckBox;

    if(v==null){
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mLayout=new View(mContext);
        mLayout=(LinearLayout) inflater.inflate(R.layout.list_menu, null);

        mText=(TextView) mLayout.findViewById(R.id.Name);
        mImage=(ImageView) mLayout.findViewById(R.id.Icon);
        mCheckBox=(CheckBox) mLayout.findViewById(R.id.mCheckbox);

        mText.setText(mName.get(position));
        mImage.setImageDrawable(mIcon.get(position));

        mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton check, boolean isChecked) {
                if(check.isChecked()){
                    Toast.makeText(mContext, "..."+mName.get(position)+"..."+position, Toast.LENGTH_SHORT).show();
                }
            }
        });
    }   
    else{
        mLayout=(View)v;
    }
    return mLayout;
}

  }
così che cosa è esattamente la domanda?
elementi di listview ottenere la ripetizione.supponiamo che A,B,C,D sono voci di elenco e quindi A,B,C,D,A,B,C,D

OriginaleL’autore yuva ツ | 2013-09-26

4 risposte

  1. 14

    provare questo, È necessario setTag() per ogni convertview.

     @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder mHolder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_menu, null);
            mHolder = new ViewHolder();
    
            mHolder.mText=(TextView) convertView.findViewById(R.id.appName);
            mHolder.mImage=(ImageView) convertView.findViewById(R.id.appIcon);
            mHolder.mCheckBox=(CheckBox) convertView.findViewById(R.id.mCheckbox);
    
            convertView.setTag(mHolder);
    
        } else {
            mHolder = (ViewHolder) convertView.getTag();
        }
    
        return convertView;
    }
    
    private class ViewHolder {
        private TextView mText;
        private ImageView mImage;
        private CheckBox mCheckBox;
    
    }
    grazie..il suo lavoro ora..
    developer.android.com/training/improving-layouts/…. la sua vista titolare non solo setTag. e vista titolare deve essere statico, perché è vista titolare finale?
    Grazie per i suggerimenti
    Ho almoust mangiare i miei denti su di esso. Grazie, ora posso andare a dormire;p

    OriginaleL’autore Murali Ganesan

  2. 1

    Cambiare la tua getView

     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mLayout=new View(mContext);
        mLayout=(LinearLayout) inflater.inflate(R.layout.list_menu, null);

    Inizializzare inflater nel costruttore. Rimuovere questo mLayout=new View(mContext) coz si stanno gonfiando un layout con mLayout=(LinearLayout) inflater.inflate(R.layout.list_menu, null)

    Nel costruttore

    LayoutInflater inflater;
    public ListAdapter(Context mContext, List<String> Name, List<Drawable> Icon) {
    this.inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.mContext=mContext;
    this.mName=Name;
    this.mIcon=Icon;
    }

    Utilizzare una Visualizzazione supporto per lo scorrimento fluido e prestazioni.

    http://developer.android.com/training/improving-layouts/smooth-scrolling.html

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    
        ViewHolder vh;
        if(convertView==null){
            vh = new ViewHolder();
            convertView =(LinearLayout) inflater.inflate(R.layout.list_menu, null);
    
            vh.mText=(TextView) convertView.findViewById(R.id.Name);
            vh.mImage=(ImageView) convertView.findViewById(R.id.Icon);
            vh.mCheckBox=(CheckBox) convertView.findViewById(R.id.mCheckbox);
    
            convertView.setTag(vh); 
        } else { 
            vh = (ViewHolder) convertView.getTag(); 
        } 
    
        vh.mText.setText(mName.get(position));
        vh.mImage.setImageDrawable(mIcon.get(position));
        vh.mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton check, boolean isChecked) {
                if(check.isChecked()){
                    Toast.makeText(mContext, "..."+mName.get(position)+"..."+position, Toast.LENGTH_SHORT).show();
                }
            }
        });
        return convertView;
    }
    
    static class ViewHolder
    {
        TextView mText;
        ImageView mImage;
        CheckBox mCheckBox;
    }

    OriginaleL’autore Raghunandan

  3. 1
    //try this
     public class ListAdapter extends BaseAdapter {
    
            private List<String> mName;
            private List<Drawable> mIcon;
            private Context mContext;
    
            public ListAdapter(Context mContext, List<String> Name, List<Drawable> Icon) {
                this.mContext=mContext;
                this.mName=Name;
                this.mIcon=Icon;
            }
    
            @Override
            public int getCount() {
                //TODO Auto-generated method stub
                return mName.size();
            }
    
            @Override
            public Object getItem(int position) {
                //TODO Auto-generated method stub
                return position;
            }
    
            @Override
            public long getItemId(int position) {
                //TODO Auto-generated method stub
                return position;
            }
    
            @Override
            public View getView(final int position, View v, ViewGroup parent) {
    
                ViewHolder holder;
    
                if(v==null){
                    holder = new ViewHolder();
                    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v =(LinearLayout) inflater.inflate(R.layout.list_menu, null);
    
                    holder.mText=(TextView) v.findViewById(R.id.Name);
                    holder.mImage=(ImageView) v.findViewById(R.id.Icon);
                    holder.mCheckBox=(CheckBox) v.findViewById(R.id.mCheckbox);
    
                  v.setTag(holder);
                }
                else{
                   holder = (ViewHolder) v.getTag();
                }
                holder.mText.setText(mName.get(position));
                holder.mImage.setImageDrawable(mIcon.get(position));
    
                holder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
                    @Override
                    public void onCheckedChanged(CompoundButton check, boolean isChecked) {
                        if(check.isChecked()){
                            Toast.makeText(mContext, "..."+mName.get(position)+"..."+position, Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                v.setTag(holder);
                return v;
            }
    
             class ViewHolder{
                TextView mText;
                ImageView mImage;
                CheckBox mCheckBox;
            }
    
        }
    v.setTag(holder); nel if(v==null) dichiarazione sarà causa di NPE.
    controllare il mio aggiornati ans e grazie per l’evidenziazione.

    OriginaleL’autore Haresh Chhelana

  4. 0

    Assicurarsi che il convertView non è null. Quindi inserire tutto il codice dopo il se(convertView == null){
    } che assicura di avere un convertView il cui valore non è null, gonfiando dal contesto, se è così.

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    
      if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(R.layout.list_menu, parent, false);
      } 
    
      TextView mText=(TextView) convertView.findViewById(R.id.appName);
      ImageView mImage=(ImageView) convertView.findViewById(R.id.appIcon);
      CheckBox mCheckBox=(CheckBox) convertView.findViewById(R.id.mCheckbox);
    
      mText.setText(mName.get(position));
      mImage.setImageDrawable(mIcon.get(position));
    
      return convertView;
    }
    contextView non deve essere null. Così la ricerca di visualizzazioni dopo se(convertView == null){} per risolvere il problema.

    OriginaleL’autore Avinash_ks

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *