视图中的view总是被自动设为selected,怎么办?

whylhow 2016-06-21 05:21:48
1、应用主界面如下,ToolBar + DrawerLayout:

点击进入任意一个子功能界面,不做任何操作,直接点击返回键或左上角返回按钮,
返回主界面后,主界面左上角的“菜单”按钮,被自动设为selected=true,如下图:

触摸屏幕做任意操作后恢复正常。

2、日期选择器,日历部分被自动“聚焦”或“选中”:

触摸屏幕做任意操作后恢复正常:


3、某子功能界面如下,ToolBar + DrawerLayout + SwipeRefreshLayout + ListView:

点击列表项,进入下一级子功能界面,不做任何操作,直接返回
之前点击的列表项被设为selected=true,背景变为蓝色:

列表项的背景通过一个selector.xml来控制,只有state_selected="true"时,背景为蓝色。
因此标题中说是被设为selected。

这个应用的套路已经用过两次了,前两个应用都没出现这种问题。
真的很抓狂。
请大家帮忙看看。
...全文
250 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
whylhow 2016-06-24
  • 打赏
  • 举报
回复
引用 3 楼 xi923 的回复:
这应该就是进入页面后自动把第一个view变成selected=true状态 3种思路: 1. 在该View的parentView中设置 android:focusable="true" android:focusableInTouchMode="true" 2. 在你的获得焦点的VIew前面放一个“伪View” 代替它成为该页面的第一个View,大小,宽度都等于1px [b]基本看不到,所以应该也不影响页面的功能 这种做法只是再你找不到其他方法解决问题的时候可以试试,建议还是找到原因 3. 和楼上有提到的,不要监听selected状态,改监听focused 在selector中设置selected不要变成蓝色就好了 一个页面只有一个View能获得focus,但是可以有多个View同时获得 selected = true
1、2都试过了,没用。 我功能上需要selected,所以3也不行。 这个问题是全局的,无论是activity、Fragment、dialog, 反正每一个新出现的界面,界面中(一般是第一个)元素会被“选中”。 比如新进入一个activity界面,左上角的返回按钮会被选中; 弹出日期选择框,日历部分的view会被选中; 弹出下拉列表,列表的第一项会被选中; 进入新的activity界面,不做任何操作直接返回,父级界面的左上角返回按钮会被选中。 以上这些情况,只要触摸屏幕,不管是任何操作,包括下拉通知栏,操作“小圆点”之类的控件,立刻恢复正常。 所以我感觉是不是项目配置之类的出了问题。
whylhow 2016-06-24
  • 打赏
  • 举报
回复
已经解决! 原因是我的listView在一个不起眼的地方,调用了requestFocusFromTouchMode()。 但我不理解的是,这行代码是历史遗留的,而之前的版本都没出现这种现象。 调试的时候详细地对比了前后两个使用同一套代码的APP,前一个APP就是没问题,导致略过了这一点,一直无法定位问题。 而且为什么这个listView.requestFocusFromTouchMode()之后,会影响到其父级和子级界面的元素呢?
一袭白衣 2016-06-22
  • 打赏
  • 举报
回复
这应该就是进入页面后自动把第一个view变成selected=true状态 3种思路: 1. 在该View的parentView中设置 android:focusable="true" android:focusableInTouchMode="true" 2. 在你的获得焦点的VIew前面放一个“伪View” 代替它成为该页面的第一个View,大小,宽度都等于1px 基本看不到,所以应该也不影响页面的功能 这种做法只是再你找不到其他方法解决问题的时候可以试试,建议还是找到原因 3. 和楼上有提到的,不要监听selected状态,改监听focused 在selector中设置selected不要变成蓝色就好了 一个页面只有一个View能获得focus,但是可以有多个View同时获得 selected = true
whylhow 2016-06-22
  • 打赏
  • 举报
回复
引用 1 楼 xb_hope 的回复:
能不能用state_pressed = "true" 时为蓝色
不行,我的列表有长按可选中的功能,选中情况下的背景为蓝色,通过setSelected(true)实现。
  • 打赏
  • 举报
回复
能不能用state_pressed = "true" 时为蓝色

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧