Eu tenho um ListActivity simples que usa um ListAdapter personalizado para gerar os modos de exibição na lista. Normalmente, o ListAdapter apenas preencheria as visualizações com TextViews, mas agora quero colocar um botão lá também.
É meu conhecimento e experiência, entretanto, que colocar uma visualização focalizável no item da lista evita o disparo de onListItemClick () na ListActivity quando o item da lista é clicado. O botão ainda funciona normalmente dentro do item da lista, mas quando algo além do botão é pressionado, quero que onListItemClick seja acionado.
Como posso fazer isso funcionar?
android
android-widget
android-listview
CodeFusionMobile
fonte
fonte
Respostas:
como escrevi no comentário anterior, a solução é setFocusable (false) em ImageButton.
Existe uma solução ainda mais elegante para tentar adicionar o
android:descendantFocusability="blocksDescendants"
layout raiz do elemento da lista. Isso tornará os cliques emListItem possíveis e, separadamente, você pode lidar com cliques de botão ou ImageButtonEspero que ajude ;)
Felicidades
fonte
android:descendantFocusability="blocksDescendants"
foi perfeito.Espero poder ajudar aqui. Presumo que você tenha um layout personalizado para itens listView, e esse layout consiste em um botão e algumas outras visualizações - como TextView, ImageView ou qualquer outra. Agora você deseja ter um evento diferente disparado no clique do botão e um evento diferente disparado em todos os outros cliques.
Você pode conseguir isso sem usar onListItemClick () de sua ListActivity.
Aqui está o que você deve fazer:
Você está usando um layout personalizado, então provavelmente está substituindo o método getView () de seu adaptador personalizado. O truque é definir os ouvintes diferentes para o botão e diferentes para a exibição inteira (sua linha). Dê uma olhada no exemplo:
Sua classe OnItemClickListener pode ser declarada como aqui:
É claro que você provavelmente adicionará mais alguns parâmetros ao construtor OnItemClickListener.
E uma coisa importante - a implementação de getView mostrada acima é muito feia, normalmente você deve usar o padrão ViewHolder para evitar chamadas findViewById .. mas provavelmente você já sabe disso.
Meu arquivo custom_row.xml é RelativeLayout com Botão de id "botão", TextView de id "texto" e ImageView de id "imagem" - apenas para deixar as coisas claras.
Saudações!
fonte
Quando um ListView personalizado contém elementos focalizáveis, onListItemClick não funciona (acho que é o comportamento esperado). Basta remover o foco da visualização personalizada. Isso resolverá o problema:
Por exemplo:
fonte
Eu tenho o mesmo problema: OnListItemClick não disparou! [RESOLVIDO]
Isso acontece na classe que estende ListActivity,
com um layout para ListActivity que contém TextBox e ListView aninhados em LinearLayout
e outro layout para as linhas (um CheckBox e TextBox aninhados em LineraLayout).
Este é o código:
res / layout / configpage.xml (principal para ListActivity)
src /.../.../ ConfigPage.java
Isso começou a funcionar quando adicionei row.xml
android:focusable="false"
android:focusableInTouchMode="false"
Eu uso Eclipse 3.5.2
Android SDK 10.0.1
min SDK versão: 3
Espero que seja útil
... e desculpe pelo meu inglês :(
fonte
basta adicionar
android:focusable="false"
como um dos atributos do seu botãofonte
Eu tive o mesmo problema com ToggleButton. Depois de meio dia batendo minha cabeça contra a parede, eu finalmente resolvi. É tão simples quanto deixar a visão focalizável sem foco, usando 'android: focalizável'. Você também deve evitar brincar com o foco e a capacidade de clicar (acabei de criar palavras) da linha da lista, apenas deixe-as com o valor padrão.
Obviamente, agora que suas visualizações focalizáveis na linha da lista não podem ser focalizadas, os usuários que usam o teclado podem ter problemas, bem, focalizá-los. Não é provável que seja um problema, mas apenas no caso de você querer escrever aplicativos 100% perfeitos, você pode usar o evento onItemSelected para tornar os elementos da linha selecionada focalizáveis e os elementos da linha previamente selecionada não focalizáveis.
fonte
fonte
Eu usei getListAdapter (). GetItem (position) instanciando um Object que contém meus valores dentro do item
em seguida, usado o método getter do myPojo, ele chamará seus valores apropriados dentro do item.
fonte