2017-06-21 98 views
0

我有一個android自定義listview。

但是當我的listview滾動一些項目重複!!!!
我的自定義列表視圖代碼:
android listview滾動時重複項目

static class ViewHolder { 
    ImageView imgPlaySound,imgShareList; 
    TextView txtCaption,txtDynamicTimer,txtDurationSplit,txtTotalTimer,txtHiden; 
    Spinner spTags; 
    SeekBar soundSeekBar; 
    LinearLayout linearSeek; 
    int positions; 
} 

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

    vg = parent; 
    final ArrayList arrTagNameTemp = new ArrayList(); 
    final ArrayList arrStartTimeTemp = new ArrayList(); 
    final ArrayList arrStopTimeTemp = new ArrayList(); 

    arrTagNameTemp.add("all"); 
    final ViewHolder viewHolder; 
    if (convertView == null) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.listview, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.positions = position; 
     viewHolder.txtCaption = (TextView) convertView.findViewById(R.id.txtCaption); 
     viewHolder.txtDynamicTimer = (TextView) convertView.findViewById(R.id.txtDynamicTimer); 
     viewHolder.txtDurationSplit = (TextView) convertView.findViewById(R.id.txtTotalTimer); 
     viewHolder.imgPlaySound = (ImageView) convertView.findViewById(R.id.imgPlaySound); 
     viewHolder.imgShareList = (ImageView) convertView.findViewById(R.id.imgShareList); 
     viewHolder.linearSeek = (LinearLayout) convertView.findViewById(R.id.linearSeek); 
     viewHolder.soundSeekBar = (SeekBar) convertView.findViewById(R.id.seekBar1); 
     viewHolder.spTags = (Spinner) convertView.findViewById(R.id.spTags); 
     // viewHolder.imgPlaySound.setOnClickListener(vdClickListener); 
     convertView.setTag(viewHolder); 
    } 
    else 
    { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 
    ///////////////////////////////////////////////////////////////////////// 
    final MenuItem strListItem = (MenuItem) arrSubject.get(position); 
    //viewHolder.txtCaption.setText(arrSubject.get(viewHolder.positions).toString()); 
    viewHolder.txtCaption.setText(strListItem.getItemId()); 
    return convertView; 
} 


我對這個很困惑。
任何人都可以幫我解決這個問題嗎?

+0

然後'arrSubject'中的項目也重複。 –

+0

當滾動它調用每個項目的getView()方法。它執行arrTagNameTemp.add(「all」);多次添加新項目,將其刪除到構建器 –

回答

0
final ArrayList arrTagNameTemp = new ArrayList(); 
final ArrayList arrStartTimeTemp = new ArrayList(); 
final ArrayList arrStopTimeTemp = new ArrayList();  

static class ViewHolder { 
    ImageView imgPlaySound,imgShareList; 
    TextView txtCaption,txtDynamicTimer,txtDurationSplit,txtTotalTimer,txtHiden; 
    Spinner spTags; 
    SeekBar soundSeekBar; 
    LinearLayout linearSeek; 
    int positions; 
} 

    @Override 
    public View getView(final int position,View convertView, final ViewGroup parent) { 
ViewHolder viewHolder=new ViewHolder(); 
if (convertView == null) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    convertView = inflater.inflate(R.layout.listview, null); 
    viewHolder.txtCaption = (TextView) convertView.findViewById(R.id.txtCaption); 
    viewHolder.txtDynamicTimer = (TextView) convertView.findViewById(R.id.txtDynamicTimer); 
    viewHolder.txtDurationSplit = (TextView) convertView.findViewById(R.id.txtTotalTimer); 
    viewHolder.imgPlaySound = (ImageView) convertView.findViewById(R.id.imgPlaySound); 
    viewHolder.imgShareList = (ImageView) convertView.findViewById(R.id.imgShareList); 
    viewHolder.linearSeek = (LinearLayout) convertView.findViewById(R.id.linearSeek); 
    viewHolder.soundSeekBar = (SeekBar) convertView.findViewById(R.id.seekBar1); 
    viewHolder.spTags = (Spinner) convertView.findViewById(R.id.spTags); 
    // viewHolder.imgPlaySound.setOnClickListener(vdClickListener); 
    convertView.setTag(viewHolder); 
}else{ 
    viewHolder = (ViewHolder) convertView.getTag(); 
} 

final MenuItem strListItem = (MenuItem) arrSubject.get(position); 
viewHolder.txtCaption.setText(strListItem.getItemId()); 
return convertView; 
} 
0

嘗試用演示結構,只需添加您的佈局,並通過上下文和POJO類。這裏只是演示

public class MoveinAdapter extends BaseAdapter { 

    private ArrayList<MoveinResponse> MoveinResponse; 
    private Context cntx; 
    private ViewHolder holder; 
    private View convertView; 

    public MoveinAdapter(Context cntx, ArrayList<MoveinResponse> MoveinResponse) { 
     // TODO Auto-generated constructor stub 

     this.MoveinResponse = MoveinResponse; 
     this.cntx = cntx; 
     holder = null; 
    } 

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

    @Override 
    public Object getItem(int position) { 
     return MoveinResponse.get(position); 
    } 

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) cntx 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.row_movein_screen, parent, false); 
      holder = new ViewHolder(); 
      holder.row_movein_customer = (TextView) convertView 
        .findViewById(R.id.row_movein_customer); 

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

     final MoveinResponse nevi = MoveinResponse.get(position); 
     holder.row_movein_customer.setText(nevi.getCustomerName()); 

     convertView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(cntx,"Here your clicked view",Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     return convertView; 
    } 
    private static class ViewHolder { 
     public TextView row_movein_customer; 

    } 
}