首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android自定义列表适配器总是删除最后一项

Android自定义列表适配器总是删除最后一项
EN

Stack Overflow用户
提问于 2017-04-05 07:48:53
回答 1查看 437关注 0票数 1

日安,

我正在尝试更新我对android编程的知识。

通过创建一个带有自定义适配器列表的简单备忘录应用程序。

我的问题是,即使我叫“NotifyDataSetChanged()”,

在我的列表中删除的值总是最后一个。

虽然当我刷新它时,它将显示正确的。

这是我的代码:

代码语言:javascript
复制
public class CustomAdapter extends BaseAdapter{   
List<Memo> memos;
Context context;
int [] imageId;


private static LayoutInflater inflater = null;
public CustomAdapter(MainActivity mainActivity, List<Memo> _memos) {
    memos = _memos;
    context = mainActivity;
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
    return memos.size();
}

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

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

public class Holder
{
    TextView tv;
    TextView tv2;
    Button deleteMemoBtn;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    Holder mViewHolder = null;

    if (convertView == null) {
        mViewHolder = new Holder();
        LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        convertView = vi.inflate(R.layout.list_memo, parent, false);
        mViewHolder.tv = (TextView) convertView.findViewById(R.id.textView1);
        mViewHolder.tv2 = (TextView) convertView.findViewById(R.id.textView2);
        mViewHolder.deleteMemoBtn = (Button) convertView.findViewById(R.id.deleteMemoBtn);

        mViewHolder.tv.setText(memos.get(position).getMemoTitle());
        mViewHolder.tv2.setText(Integer.toString(memos.get(position).getMemoID()));

        mViewHolder.tv.setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "You Clicked " + memos.get(position).getMemoTitle(), Toast.LENGTH_LONG).show();
            }
        });  



        mViewHolder.deleteMemoBtn.setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "deleted " + Integer.toString(position), Toast.LENGTH_LONG).show();   
                memos.remove(position);
                notifyDataSetChanged();
            }
        });  


    }
    return convertView;
}


} 

希望有人能让我明白为什么这段代码不起作用。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-05 08:18:40

试试这段代码。

代码语言:javascript
复制
public class CustomAdapter extends BaseAdapter {
    List<Memo> memos;
    Context context;
    int[] imageId;


    private LayoutInflater inflater = null;

    public CustomAdapter(Context mainActivity, List<Memo> _memos) {
        memos = _memos;
        context = mainActivity;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return memos.size();
    }

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

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

    public class Holder {
        TextView tv;
        TextView tv2;
        Button deleteMemoBtn;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        Holder mViewHolder = null;

        if (convertView == null) {
            mViewHolder = new Holder();

            convertView = inflater.inflate(R.layout.list_memo, parent, false);
            mViewHolder.tv = (TextView) convertView.findViewById(R.id.textView1);
            mViewHolder.tv2 = (TextView) convertView.findViewById(R.id.textView2);
            mViewHolder.deleteMemoBtn = (Button) convertView.findViewById(R.id.deleteMemoBtn);
            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (Holder) convertView.getTag();
        }

        mViewHolder.tv.setText(memos.get(position).getMemoTitle());
        mViewHolder.tv2.setText(Integer.toString(memos.get(position).getMemoID()));
        mViewHolder.tv.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "You Clicked " + memos.get(position).getMemoTitle(), Toast.LENGTH_LONG).show();
            }
        });
        mViewHolder.deleteMemoBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "deleted " + Integer.toString(position), Toast.LENGTH_LONG).show();
                memos.remove(position);
                notifyDataSetChanged();
            }
        });


        return convertView;
    }


} 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43225023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档