Refre sh ListView, когда элемент в адаптере удален - PullRequest
0 голосов
/ 13 апреля 2020

Я создал ListView элементов, каждый из которых выглядит следующим образом:

enter image description here

В упрощенном коде это выглядит так:

publi c класс 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;
    }

}

Теперь у меня было такое, когда пользователь нажимает ToggleButton на кнопке x, которую он удаляет этот элемент из списка и что представление будет обновляться на этом экране.

Как я могу это сделать?

Я видел, что для этого случая notifyDataSetChanged() не будет работать.

В основном я пытаюсь обновить список sh, не вызывая снова действие.

Спасибо

1 Ответ

0 голосов
/ 13 апреля 2020

Вы можете попробовать вот так:

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();
    }
}
...