Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] ListView + Listener

Fala Geronildo.

Ja passei por este problema... 
Quando inserimos componentes "Clicáveis" na view do adapter que popula o Listview, estes componentes tem "prioridade" no focus da linha.

Faça esta configuração
    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:focusable="false"
        android:focusableInTouchMode="false" />

E claro... implementa o listener do checkbox separado.

[]
rbarbioni


Em 26 de janeiro de 2013 16:24, Geronildo Jr. <geronildojr@gmail.com> escreveu:
Pessoal, bom dia!

Depois de muito pesquisar (inclusive aqui no grupo) e quase quebrar a cabeça, me rendi e estou aqui pedindo ajuda da comunidade.

É o seguinte, eu tenho uma Activity que exibirá dados em uma ListView e eu preciso manipular outros dados da Activity que dependem de qual item da ListView eu clique (que possui 4 componentes: 1 CheckBox e 3 TextView). Até aqui vocês vão pensar: "pôh, é só criar uma lista de dados, alimentar o adapter que exibe os componentes das linhas do ListView e depois acessar os itens da lista pelo método setOnItemClickListener()". O problema é que o listener não está funcionando no meu código (que segue abaixo). Também tentei colocar o listener no getView() do meu adaptador (no CheckBox), mas me deparo com outro problema: não importa em qual item da lista eu click, qualquer evento fica associado ao ultimo item da lista.

Help, please!


XML (dos Itens que serão exibidos no ListView):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
  android:paddingLeft="0dp"
  android:paddingTop="5dp"
  android:paddingRight="5dp"
  android:paddingBottom="5dp"
    android:orientation="vertical"
    android:background="@color/fundo_transparente_cinza" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
        <TextView
            android:id="@+id/id"
            style="@style/label"
            android:visibility="gone" />
        <CheckBox
            android:id="@+id/produto"
          style="@style/label_pequeno"
          android:layout_height="30dp"
      android:layout_weight="1"
          android:text="@string/teste_produto" />
      <TextView
          android:id="@+id/valor"
          style="@style/label_pequeno"
          android:layout_height="30dp"
      android:layout_weight="2"
      android:gravity="right"
          android:text="@string/teste_valor" />    
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
        <TextView
            android:id="@+id/qtd"
          style="@style/label_pequeno_pedido"
          android:layout_weight="3"
      android:gravity="right"
          android:text="@string/teste_qtd" />
        <TextView
            style="@style/label_pequeno_pedido"
            android:layout_weight="3"
            android:gravity="center"
      android:text="@string/label_x" />
      <TextView
          android:id="@+id/valor_unitario"
          style="@style/label_pequeno_pedido"
      android:layout_weight="1"
      android:gravity="left"
          android:text="@string/teste_valor_unitario" />    
    </LinearLayout>  
</LinearLayout>



Activity (que exibe a ListView):

..
public void onCreate(Bundle savedStateInstance){
...
lvItensPedido = (ListView)findViewById(R.id.produtos);
cbProduto = (CheckBox)findViewById(R.id.produto);
tvQtdTotalProduto = (TextView)findViewById(R.id.qtd);
tvValorTotalProduto = (TextView)findViewById(R.id.valor);
tvValorUnitarioProduto = (TextView)findViewById(R.id.valor_unitario);

]//onCreate()

public void onResume(){
...
List<PedidoItem> itensPedido = listaItensPedido(pedido.id);
ArrayAdapter<PedidoItem> itensAdapter = new PedidoItemAdapter(this, R.layout.pedido_item, itensPedido);
lvItensPedido.setAdapter(itensAdapter);

        lvItensPedido.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
String item = ((CheckBox)view).getText().toString();
Log.i(TAG, "item da lista clicado: " + item);
}
});
}


PedidoItemAdapter (meu adapter para povoar o ListView):

public class PedidoItemAdapter extends ArrayAdapter<PedidoItem> {

public static final String TAG = "ArtFoto";
public final LayoutInflater inflater;
public final Context context;
public final int resourceId;
public static CheckBox cbProduto;
public TextView tvId, tvValorUnitario, tvQtd, tvValorTotal;
public static PedidoItem item;
public PedidoItemAdapter(Context context, int resource,  List<PedidoItem> produtos){
super(context, resource, produtos);
this.inflater = LayoutInflater.from(context);
this.resourceId = resource;
this.context = context;
}

@Override
public View getView(int position, View view, ViewGroup parent){
item = getItem(position);
view = inflater.inflate(resourceId, parent, false);
tvId = (TextView)view.findViewById(R.id.id);
cbProduto = (CheckBox)view.findViewById(R.id.produto);
tvValorUnitario = (TextView)view.findViewById(R.id.valor_unitario);
tvQtd = (TextView)view.findViewById(R.id.qtd);
tvValorTotal = (TextView)view.findViewById(R.id.valor);
tvId.setText(String.valueOf(item.id));
cbProduto.setText(item.nomeProduto);
cbProduto.setChecked(true);
tvValorUnitario.setText(String.format("%.2f", item.valorUnitario));
tvQtd.setText(String.valueOf(item.qtd));
tvValorTotal.setText(String.format("%.2f",item.valorTotal));
return view;
}
}




Atenciosamente,


Geronildo Jr.
Twitters: @GeronildoJr || @GeronDesign
 

--
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário