在我的自定义列表视图中,项目正在重复.项目的位置对于所有项目是相同的.
代码如下
代码如下
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; } }
解决方法
试试这个,你需要为每个转换视图设置setTag().
@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; }