简体   繁体   English

当适配器中的项目被删除时刷新 ListView

[英]Refresh ListView when item in adapter is removed

I have created a ListView of items that each one of them looks as follows:我创建了一个 ListView 项目,每个项目如下所示:

在此处输入图像描述

In simplified code, It looks like this:在简化的代码中,它看起来像这样:

public class MyBAdapter extends ArrayAdapter {公共 class MyBAdapter 扩展 ArrayAdapter {

    private static class ViewHolder {
        public ImageButton ib_Delete;
        public ToggleButton tb_Status;
    }

    public MyBAdapter(Context context, ArrayList<MyB> aB) {
        super(context, 0, aB);
    }

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

        final MyB b = getItem(position);

        ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate( R.layout.item_b_myb, parent, false);
            viewHolder.ib_DeleteB = convertView.findViewById( R.id.ib_DeleteB );
            viewHolder.tb_Status = convertView.findViewById( R.id.tb_Status );

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

        return convertView;
    }

}

Now, I had like that once a user clicks on the ToggleButton of on the x button, that it will remove this item from the list and that the view will be updated on this screen.现在,我喜欢一旦用户单击x按钮上的ToggleButton ,它将从列表中删除此项目,并且视图将在此屏幕上更新。

How can I do it?我该怎么做?

I saw that for this case notifyDataSetChanged() won't work.我看到在这种情况下notifyDataSetChanged()将不起作用。

Basically what I'm trying to do is to refresh the list without calling again the activity.基本上我想要做的是刷新列表而不再次调用活动。

Thank you谢谢

You can try like this:你可以这样尝试:

public static class MyBAdapter extends ArrayAdapter {

    private ArrayList<String> aB;
    private class ViewHolder {
        public ImageButton ib_Delete;
        public ToggleButton tb_Status;
        public TextView text;
    }

    public MyBAdapter(Context context, ArrayList<String> aB) {
        super(context,0, aB);
        this.aB = aB;

    }

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

        ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate( R.layout.item_b_myb, parent, false);
            viewHolder.ib_Delete = convertView.findViewById( R.id.ib_DeleteB );
            viewHolder.tb_Status = convertView.findViewById( R.id.tb_Status );
            viewHolder.text = convertView.findViewById( R.id.text );

            convertView.setTag(viewHolder);


        } else {
            viewHolder = (ViewHolder) convertView.getTag();
            viewHolder.tb_Status.setChecked(false);
        }

        viewHolder.text.setText(aB.get(position));
        viewHolder.ib_Delete.setTag(position);
        viewHolder.ib_Delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(viewHolder.tb_Status.isChecked()){
                    delete((Integer)view.getTag());
                }
            }
        });
        return convertView;
    }

    private void delete(int position) {
        aB.remove(position);
        notifyDataSetChanged();
    }

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM