Download - Android – Criar ListView com um botão em cada item

Transcript

Android Criar ListView com um boto em cada itemLucas Schiolin Silveira 20/05/2012 possvel encontrar vrios tutoriais e artigos na internet (inclusive no site de desenvolvimento do Anrdroid http://developer.android.com) que explicam como criar uma ListView. Porm, a maioria mostra como exibir itens que contm elementos que no recebem foco naturalmente, como um texto, uma imagem, etc. provvel que exista a necessidade de exibir elementos que recebem foco em um item dessa lista, como botes, caixas de checagem, etc. Intuitivamente, no se v problemas em colocar esses elementos no layout do item da lista, mas eles existem. O Android no permite que um elemento focusable seja colocado dentro de um item da lista, que tambm focusable, e ambos continuem com essa propriedade. Nesse caso, ele desativa essa propriedade de todos os elementos focusable e a lista fica com um aspecto de somenteleitura. Para corrigir esse problema, algumas aes devem ser tomadas. Imagine que o item da lista criada tem um Button com id btnButton. No evento getView do adapter dessa ListView, deve ser includo um cdigo semelhante ao seguinte:Button b = (Button)listV.findViewById(R.id.btnButton); b.setClickable(true); b.setFocusable(true); b.setBackgroundResource(android.R.drawable.menuitem_background); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // implemente aqui o Evento click do botao } });

Essas instrues fazem com que esse elemento torne-se clicvel e focvel. O mtodo setBackgroundResource adiciona o highlight ao boto (aspecto alaranjado que o boto assume quando pressionado API 7). Tambm deve ser includo o evento click desse boto. O mtodo getView retorna a view correspondente ao item da lista. Se essas instrues tambm forem feitas no item que ser retornado pelo getView, ento o item da lista tambm se tornar clicvel, permitindo operaes diferentes ao selecionar o item e ao selecionar o boto contido nesse item. Note que, dessa forma, o evento click do item no ser mais tratado atravs do onItemClickListener do ListView em questo. Tambm preciso acrescentar a instruo setItemsCanFocus(true); na ListView (mtodo getListView se estiver em uma ListActivity), para indicar que pode haver foco nos itens do ListView.