Boa tarde Galera,
sou novato aqui no forum e em programação tbm hehehe,
gostaria de uma ajudinha com um probleminha que estou tendo,
gostaria de coloca um botão dentro de cada item do listView, e quando o botão é clicado, ele exibe uma alerta com uma informação do item, eu implementei um Adapter que estende da classe baseAdapter, meu problema é com os botões dentro do item do listview, eu tentei setOnClickListener dentro do Adapter o problema é que ele cria um novo objeto cada vez que vc percorre a lista, eu não consegui reaproveitar a instância do objeto do determinado item.
tentei outra solução que foi criar a instancia dentro do itemClick do listview, problema é ao clicar no botão e percorrer a lista e clicar novamente com o botão no primeiro ele retorna informação do ultimo penultimo item, eu gostaria de saber se existe uma possibilidade de criar uma instância para cada botão e reaproveitar ela?
Texto meio confuso! mas se o problema é “descobrir” qual botão foi apertado… essa é a solução:
[code] @Override
public View getView(int position, View convertView, ViewGroup parent) {
View convertViewHolder = convertView;
if ((convertViewHolder == null) && (mContext != null)) {
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
convertViewHolder = layoutInflater.inflate(R.layout.row_list, parent, false);
}
if ((convertViewHolder != null) && (mList != null)) {
Button button = (Button) convertViewHolder.findViewById(R.id.button1);
int item = (Integer) getItem(position);
button.setText("Item " + item);
button.setTag(position); //registra tag
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int position = (Integer) v.getTag(); //recupera tag
Log.d("debug", "OnClick "+position);
final String text = "Item " + position;
AlertDialog dialog = new AlertDialog.Builder(mContext).create();
dialog.setMessage(text);
dialog.show();
}
});
}
return convertViewHolder;
}[/code]
Bom dia Fabricio desculpe me pelo texto que realmente esta confuso, eu estava meio com presa quando digitei, e obrigado pela resposta.
só para melhor esclarecimento, essa linha
Essa linha é uma implementação anônima de OnClickListener certo?
meu problema é exatamente ae, cada vez que o listview é percorrido ele passa criando uma nova instância para cada item digamos que eu tenha percorrido do item 1 ao item 35 e quando eu voltar ao item 1 novamente OnclickListener é instânciado, e a memória do dispositivo ta indo pro espaço com isso…
Nessa linha eu crio um onClickListener para o botão que vai aparecer na Linha do ListView e adiciono uma tag com a posição (position) dele na lista.
Quando o evento onClick dele é chamado, eu recupero a tag e pronto!
bem, sobre ser instanciado varias vezes creio que não vá acontecer desse modo, já que é instanciado o Listener ja dentro da view que vai ser jogada na ListView. (Pelo menos nunca tive esse tipo de problema
)
Qualquer coisa adiciona um System.gc