`
zengyan2012
  • 浏览: 414997 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ListView Item 与子控件焦点问题

 
阅读更多

在项目中,item中有3个控件,其中有2个控件是可以正常获取到焦点,但是第三个点击的时候,却出发了Item的点击事件。

 

android:descendantFocusability   // 放在listview中的item的顶级布局上。

 

Constant            Value        Description

beforeDescendants 0    The ViewGroup will get focus before any of its descendants. //Item先获取到焦点

afterDescendants 1      The ViewGroup will get focus only if none of its descendants want it. //子控件获取到焦点--- 也就是item无法获取到焦点

blocksDescendants 2  The ViewGroup will block its descendants from receiving focus. //让子控件无法获取焦点 --事实证明子控件是可以获取到焦点的。

ListView默认情况

 

当item有焦点时,item上的button等子控件获取不到焦点;

当子控件有焦点时,item无焦点无法响应onItemClick事件

 

ViewGroup.FOCUS_AFTER_DESCENDANTS:表示item的子控件优先于item获得焦点;

ViewGroup.FOCUS_BEFORE_DESCENDANTS:表示item优先于其子控件获得焦点。

解决办法:

 

  1. listView.setOnItemSelectedListener(onItemSelectedListener);  
  2. private AdapterView.OnItemSelectedListener  onItemSelectedListener =   
  3.     new AdapterView.OnItemSelectedListener(){  
  4.     @Override  
  5.     public void onItemSelected(AdapterView<?> parent, View view,  
  6.             int position, long id) {  
  7.         //当此选中的item的子控件需要获得焦点时  
  8.         parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);  
  9.         //else parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);  
  10.     }  
  11.       
  12.     @Override  
  13.     public void onNothingSelected(AdapterView<?> parent) {  
  14.         parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);  
  15.     }  
  16. }  
分享到:
评论

相关推荐

    listview item点击事件冲突问题

    然而,在实际操作中,开发者经常会遇到ListView项(item)的点击事件冲突问题,这可能会导致用户体验下降或者功能出现异常。这个问题主要体现在两个方面:一是单个item的点击事件无法正常触发,二是点击事件与其它...

    listview selector 选中时改变item 子控件 图片状态

    这就是标题中提到的"listview selector 选中时改变item 子控件 图片状态"。这个过程涉及到多个关键知识点,包括自定义selector、ListView的Item点击事件以及对子View的操作。 1. **自定义Selector** Android中的...

    ListView上添加commbox、textbox等控件例子

    在实际项目中,可能还需要考虑控件的焦点管理、键盘导航和无障碍支持等问题。对于多线程或异步操作的场景,还需要确保控件操作的线程安全。 本示例中的压缩包文件包含了实现这些功能的代码示例,可以下载后运行并...

    listView item和其中的Button强焦点问题

    本篇文章将详细探讨ListView中的item与内部Button的焦点问题,以及如何解决“抢焦点”问题。 首先,我们要理解Android的焦点系统。在Android中,每个可点击或可触摸的组件都有可能获取焦点。默认情况下,用户通过...

    Android-ListView中嵌套(ListView)控件兼容问题

    ### Android-ListView中嵌套(ListView)控件兼容问题 #### 背景与问题描述 在Android开发中,有时我们需要在`ListView`中嵌套另一个`ListView`以实现更复杂的用户界面设计。然而,在实际操作过程中可能会遇到一些...

    android 的listview 内部item的布局包含checkbox控件

    android 的listview 内部item的布局包含checkbox控件时,会遇到常见的问题:1.checkbox无法选择;2.选择的checkbox后滑动listview内容时会checkbox选择的值会刷新成原来状态值(即没选中);3.选择listview所有checkbox...

    ListView 添加Combox textbox 以及其他控件

    在实际开发中,还需要考虑控件的响应性、焦点处理、键盘导航等问题。 最后,关于"严禁copy,尊重原创"的声明,这是对知识产权的尊重,也是开发者社区的基本规则。在学习和参考他人代码时,理解其工作原理并加以改进...

    ListView默认Item选中状态

    ListView的默认行为是不设置任何项为选中状态,但有时我们希望在应用启动时,第一个Item能自动呈现出选中效果,以引导用户或者突出初始焦点。本教程将深入讲解如何实现ListView的第一个Item的默认选中状态。 首先,...

    listview控件可编辑单元格

    5. **保存更改**:在用户确认更改后,将TextBox中的值赋给ListViewItem的SubItems集合中的对应项,然后删除临时的TextBox控件,恢复ListView的正常显示。 6. **错误检查**:在保存更改前,可以添加验证逻辑,确保...

    listview内嵌textbox(c#)

    // 将TextBox与ListViewItem关联 item.Tag = textBox; // 添加TextBox到item的Controls集合 item.Controls.Add(textBox); } } // 在ItemSelectionChanged事件中显示/隐藏TextBoxes private void ...

    listview和checkbox抢焦点

    然而,在实际应用中,ListView中的每一项(Item)如果包含了CheckBox,就可能出现“listview和checkbox抢焦点”的问题。这个问题主要表现在用户点击ListView项时,系统焦点可能无法正确地在ListView和CheckBox之间...

    listView实现文字编辑的自动换行

    要实现ListView中的文字编辑自动换行,我们需要结合EditText控件和自定义Adapter来完成这一功能。以下将详细阐述如何实现这一需求。 首先,我们创建一个布局文件,用于定义ListView中每一项的视图。在这个布局中,...

    C#中ListView控件的虚模式使用方法

    ListViewItem item = new ListViewItem(); // 获取并设置项的值,比如从数据库或其他数据源 item.Text = GetData(e.ItemIndex); e.Item = item; } ``` 在WPF中,可以使用`ContainerFromIndex`方法获取可视项,并...

    【Android】ListView与Button的共存问题解决

    在Android应用开发中,ListView是一种常用的控件,用于展示大量可滚动的数据列表。然而,当ListView需要与Button或其他可以触发点击事件的Widget共存时,可能会遇到一些问题。主要问题是ListView的item点击事件会被...

    android ListView抢夺焦点解决办法+显示多个不同类型item

    然而,在实际应用中,ListView可能会遇到一些问题,比如控件抢夺焦点导致的事件处理失效,以及如何在同一个ListView中显示多种类型的数据项。下面将详细介绍这两个问题的解决方法。 一、控件抢夺焦点问题及解决方案...

    listview控件功能扩展--自定义可编辑列ListViewCell[ListViewCell.rar]-精品源代码

    1. **自定义控件**:首先,你需要创建一个新的用户控件(UserControl)来替代默认的ListViewItem。这个新的控件,比如`ListViewCell`,将承载实际的数据输入字段,如TextBox或ComboBox,以实现编辑功能。 2. **事件...

    delphi7 listview上edit上下左右移动读写

    最后,为了在失去焦点或按下Esc键时隐藏Edit控件,你可以重载ListView的OnEnter事件,确保Edit控件始终位于ListView之上。 ```delphi procedure TForm1.ListView1Enter(Sender: TObject); begin if Assigned(Edit1...

    C#使用listView增删操作实例

    在这个函数内,`coutNumber`是一个计数器,用于生成第一列和第二列的文本内容,然后创建一个新的`ListViewItem`,并将其添加到`listView1`中。`new ListViewItem(new string[] { item1Str, item2Str })`这行代码表示...

    C# winform ListView 中实现可编辑文本或双击出现下拉列表框

    private TextBox GetTextBoxForColumn(ListViewItem item, int columnIndex) { // 创建并定位TextBox,使其覆盖ListView项的指定列 TextBox textBox = new TextBox(); // 设置定位、大小等属性 return textBox; ...

    C#之ListView的最佳理解

    ListViewItem item = new ListViewItem("John"); item.SubItems.Add("25"); listView.Items.Add(item); // 添加更多项,设置其他属性,绑定事件等 ``` 通过这个"C#之listview的最佳理解"的项目,你可以实践...

Global site tag (gtag.js) - Google Analytics