Android ListView的Item中的按钮Button和ImageButton共存、抢夺焦点问题

一、问题

公司App要求实现和淘宝类似的功能:从淘宝app某个商品详情点击聊天进入聊天界面,会带入商品信息。点击“发送宝贝链接”按钮,发送一条消息(宝贝链接)给卖家。如图:

在开发中遇到的问题就是,点击“发送宝贝链接”按钮,宝贝链接的消息已发送成功,但是不会再页面上显示,已添加到Adapter且notifyDataSetChanged了。但是当你触摸屏幕滑动后,宝贝链接的消息就会出现。

二、分析

在Android开发中,Button、ImageButton、和EditText等控件会主动抢夺焦点。原因是在需要键盘的App(TV类的小米盒子)需要点击按键移动焦点到下一个可操作的点,一般的方法可以nextFocusXXX中配置。

三、解决

1、将Button替换成TextView或者ImageView这些非主动抢夺焦点的控件。(TextView也可以通过设置background实现按钮的效果,仅适用非键盘的App)

2、将Button设置成  setFocusable(false)  ,且将根布局的添加属性  android:descendantFocusability="blocksDescendants" 。

四、说明

android:descendantFocusability API描述如下:

Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus. Must be one of the following constant values.

该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:

beforeDescendants:viewgroup会优先其子类控件而获取到焦点

afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

(完)

时间: 2024-11-06 19:41:28

Android ListView的Item中的按钮Button和ImageButton共存、抢夺焦点问题的相关文章

android ListView的item中Button(购物数量加减器)

1.临时保存每个item中的显示数量控件的text: HashMap<Integer,Interger> map = new HashMap<Integer,Integer>(); 使用map来保存每条item显示的数量值.EditText在BaseAdapter中的getView() 方法中去显示对应position的map中的值,如下: editText.setText(map.get(position)); 2. "-"和"+"添加点击

ListView的Item中带按钮以及按钮布局的显示与隐藏

一.上图 二.图片功能解说 1.点击ListView中其中的一项,Item中处于隐藏状态的操作按钮部分布局显示,其他项显示的布局同时被隐藏,再次点击该项,操作按钮部分布局再次隐藏. 2.点击各个按钮,分别弹出哪个按钮被点击(也就是点击每一个按钮分别处理不同按钮的业务功能). 三.实现代码主要处于适配器的处理.见如下代码: package com.test.listviewbtn.adapters; import java.util.ArrayList; import android.conten

安卓Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

Android ListView的item点击无响应的解决方法

如果listitem里面包括button或者checkbox等控件,默认情况下listitem会失去焦点,导致无法响应item的事件,最常用的解决办法 是在listitem的布局文件中设置descendantFocusability属性. item的布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.andro

Android 按钮 Button和ImageButton

Button -- 按钮ImageButton -- 图片按钮Button和ImageButton特征1.共有的特征都可以作为一个按钮产生点击事件2.不同点: (1)Button有text属性,ImageButton没有 (2)ImageButton有src属性,Button没有3.产生明显的点击效果 实现Button和ImageButton的效果注:我们一般不把android:text的信息直接写而是放在res/values/strings.xml文件中在string.xml中添加button

Android ListView滑动过程中图片显示重复错乱闪烁问题解决

转自:http://www.oschina.net/question/221817_121051 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制.1.原因分析ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则p

Android ListView滑动过程中图片显示重复错位闪烁问题解决[转载]

转自:here 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制.1.原因分析ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存:b. 获取滑入屏幕的行item之前会先判断缓存中是否有可

ListView的Item中包含checkbox,Item无法点击的3种解决方案

ListView的Item中包含checkbox,Item无法点击的2种解决方案 1.在checkbox中设置`focusable属性 android:focusable="false" 2.设置Item的布局,焦点不向下传递 android:descendantFocusability="blocksDescendants"