Ação em botões no listview

Eu tenho uma listview que exibe conteúdo do banco de dados em forma de botões mas não sei como dar ação a cada um desses botões. Vou explicar melhor:

Classe de Vendas:

 public void exibeCategorias(){

        //ACESSO DAS INFORMAÇÕES NO BANCO
        SQLiteDatabase db;
        BD banco = new BD(this);
        Cursor cursor;
        String[] campos =  {BD.ID, "categoria"};//
        db = banco.getReadableDatabase();
        cursor = db.query("categoria", campos,null,null,null,null,null);

        if(cursor!=null){
            cursor.moveToFirst();
        }
        db.close();

        //ADAPTADOR PARA EXIBIR OS DADOS
        String[] nomeCampos = new String[] {"categoria"};
        int[] idViews = new int[] {R.id.nomeCat};
        if (cursor.getCount() == 0){
            TextView texto = (TextView) findViewById(R.id.avisoBanco);
            texto.setText("Nenhum dado Cadastrado");

        } else{
            android.widget.SimpleCursorAdapter adaptador = new android.widget.SimpleCursorAdapter(getBaseContext(),
                    R.layout.exibebutton,cursor,nomeCampos,idViews, 0);

            ListView lista = (ListView)findViewById(R.id.exibeCat);
            lista.setAdapter(adaptador);

   
        }
    }

E o layout que eu pego chamado de exibebutton é esse:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical">

    <Button
        android:id="@+id/nomeCat"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp"
        tools:text="botão" />

</LinearLayout>

Como faço pra dar ação aos botões que aparecem dinamicamente ?

Eu acredito que vc irá precisar fazer um CustomAdapter.

Dentro dele que vc coloca a ação dos botões

1 curtida

E como eu faria isso em uma classe diferente? Tem como você exemplificar? Obrigado!

Cria uma classe e herda o BaseAdapter.

Resolveu? no caso, você teria que colocar um listview em sua view, criar uma adpter_view e inflar ela com um adapter. Exemplo:
A classe adapter ira construir tudo na sua list view, o ultimo metodo sobrescrito a qual se não me engano o nome é este, ira construir as views, você pode muito bem colocar em vez de textview, buttons(nunca fiz), mas como são parentes, deve ser viável.

Nota: Isso é um esboço.

public class ViewAdapter extends BaseAdapter{
    private  Context context;    
    private List<Object> object;
    ViewAdapter(Context context, List<Object> object){
     }

   ..... metodos sobrescritos que serão obrigatórios

   getView(position, container...){
    View view  = LayoutInflater.inflater(R.layout.adapter_view, container, false);
   TextView txt_view = (TextView)    view.findViewById(R.id.txt_adapter_view);

   txt_view.setText(objects[position].getText());

   return view;
  }
}

public class Activity(){

private List<Button> listButton;

ListView list = (ListView) findViewById(R.id.listview);
list.setAdapter(new ViewAdapter(this, listaButtons)
list.setOnItemClickListener(onCLickItem());//ctrl + enter e sobrescreva o itemCLick com return new Adapter.ctrl+enter 
}