android - 在android自定义 ListView 中重复列出项目

标签 android listview baseadapter

在我的自定义 ListView 中,项目重复。所有项目的项目位置都相同。 代码如下

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;
}

  }

最佳答案

试试这个,你需要为每个 convertview 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;

}

关于android - 在android自定义 ListView 中重复列出项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19019775/

相关文章:

java - 如何通过点击列表项右上角图片来更改 ListView 项图片资源?

java - 使用 firebase 在 recyclerView 中拖放

android - 我需要多久调用一次 Parse.subscribeInBackground() 才能订阅 Parse 推送?

android - 删除 facebook 库 Android Studio

java - 如何将下面显示的结果转换为 ListView?

android - 从android中的listview获取选中复选框的文本?

android - ActionBar 默认颜色

android - 更新和删除 ListView 中的行

android - 如何固定最后一个页脚(ListView)

android - 从 baseadapter 传递项目 id