Перезагрузить ListView из адаптера - PullRequest
0 голосов
/ 27 мая 2020

У меня есть список в моем приложении, управляемый с помощью адаптера. Внутри адаптера у меня есть кнопка для удаления элемента из списка, моя проблема в том, что я не вижу изменений сразу, мне нужно сбросить активность, чтобы обновить sh список. Есть ли способ обновить sh данные из getView на адаптере?

Activity

publi c class gestionCategorias extends AppCompatActivity {

private ListView listaCategorias;
private SQLAdmin sql;
private ArrayList<CategoriasModel> arrayCat;
private ImageButton delete;
private CategoriaAdapter adapter;
private EditText agregarCategoriaInput;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gestion_categorias);

    listaCategorias = (ListView) findViewById(R.id.listaCategorias);
    arrayCat = new ArrayList<>();

    sql = new SQLAdmin(this);
    delete = (ImageButton) findViewById(R.id.eliminarCategoria);
    agregarCategoriaInput = (EditText) findViewById(R.id.agregarCategoriaInput);

    loadDataInListView();


}


public void loadDataInListView() {
    arrayCat = sql.getAllCategorias();
    adapter = new CategoriaAdapter(this, arrayCat);
    listaCategorias.setAdapter(adapter);
    adapter.notifyDataSetChanged();

}

Adapter => (Идея состоит в том, чтобы обновлять sh список, когда я нажимаю на кнопка "удалить")

public class CategoriaAdapter extends BaseAdapter {

private Context context;
private ArrayList<CategoriasModel>arrayList;

public CategoriaAdapter (Context context, ArrayList<CategoriasModel>arrayList){
    this.context = context;
    this.arrayList = arrayList;
}


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

        LayoutInflater inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inf.inflate(R.layout.categorialv , null);

        final SQLAdmin sql = new SQLAdmin(context.getApplicationContext());

        final TextView categoria_nombre = (TextView) convertView.findViewById(R.id.nombreCategoria);

        final CategoriasModel categoriasModel = arrayList.get(position);

        categoria_nombre.setText(categoriasModel.getNombre());

        ImageButton eliminar = (ImageButton)convertView.findViewById(R.id.eliminarCategoria);

        eliminar.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                                sql.eliminarCategoria(arrayList.get(position).getId());
                                Toast.makeText(context.getApplicationContext() , "Categoria eliminada" , Toast.LENGTH_SHORT).show();
            }
        });

        return convertView;
    }
}

Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 мая 2020

Вам необходимо вызвать notifyDataSetChanged () после удаления элемента.

eliminar.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {


                            sql.eliminarCategoria(arrayList.get(position).getId());
                            Toast.makeText(context.getApplicationContext() , 
                                "Categoria eliminada" , Toast.LENGTH_SHORT).show();
                            notifyDataSetChanged(); // refresh the list
        }
    });
0 голосов
/ 27 мая 2020

, возможно, вы могли бы попробовать это, очистив список и добавив новый

public void loadDataInListView() {
        arrayCat.clear();
        arrayCat = sql.getAllCategorias();
        adapter = new CategoriaAdapter(this, arrayCat);
        listaCategorias.setAdapter(adapter);
        adapter.notifyDataSetChanged();

    }
0 голосов
/ 27 мая 2020

Я решил это, добавив в свой адаптер следующий код =>

 if (context instanceof gestionCategorias){
                    ((gestionCategorias)context).loadDataInListView();
                }

LoadDataInListView снова загружает все данные и обновляет список.

...