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

ListView中getChildAt(index)的使用注意事项

 
阅读更多
1.原理
在很多时候ListView列表数据不需要全部刷新,只需刷新有数据变化的那一条,这时可以用getChildAt(index)获取某个指定position的view,并对该view进行刷新。

注意:在ListView中,使用getChildAt(index)的取值,只能是当前可见区域(列表可滚动)的子项!

即取值范围在 >= ListView.getFirstVisiblePosition() &&  <= ListView.getLastVisiblePosition();
1)所以如果想获取前部的将会出现返回Null值空指针问题;
2)getChildCount跟getCount获取的值将会不一样(数量多时);
3 )如果使用了getChildAt(index).findViewById(...)设置值的话,滚动列表时值就会改变了。
   需要使用getFirstVisiblePosition()获得第一个可见的位置,再用当前的position-它,再用getChildAt取值!即getChildAt(position - ListView。getFirstVisiblePosition()).findViewById(...)去设置值
2.如果想更新某一行数据,需要配合ListView的滚动状态使用,一般不滚动时才加载更新数据

//全局变量,用来记录ScrollView的滚动状态,1表示开始滚动,2表示正在滚动,0表示停止滚动 
伪代码
ListView设置
public int scrollStates;
class OnScrollListenerImpl implements OnScrollListener{
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
scrollStates = scrollState; 
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
int lastInScreen = firstVisibleItem + visibleItemCount;
}
listView.setOnScrollListener(new OnScrollListenerImpl());


Activity中
if(scrollStates==OnScrollListener.SCROLL_STATE_IDLE){

更新视图数据
}
分享到:
评论
4 楼 ahua186186 2015-08-19  
yngwiet 写道
楼主,有一个地方不太明白,为什么要用“getChildAt(position - ListView。getFirstVisiblePosition()).findViewById(...)”去设置?谢谢!


不好意思,我很久没玩Android啦,忘记当初的想法啦,这只是一个技巧,当初最高android版本才2.几,  你可以想想更好的思路。
3 楼 yngwiet 2015-08-18  
楼主,有一个地方不太明白,为什么要用“getChildAt(position - ListView。getFirstVisiblePosition()).findViewById(...)”去设置?谢谢!
2 楼 yhbanywn 2014-11-21  
非常感谢!!!!It helps!
1 楼 月光照着我 2014-08-13  
谢谢,学习了

相关推荐

    ListView中HeadView的使用

    本教程将详细介绍如何在ListView中添加并使用HeadView。 首先,HeadView可以看作是ListView中的一个特殊项,它位于数据列表的最上方。与普通列表项不同,HeadView并不参与数据适配器的数据循环,因此不会被ListView...

    ListView嵌套GridView使用详解及注意事项

    import java.util.ArrayList; import java.util.HashMap;... /** * Demo描述: * ListView嵌套GridView使用详解 * 即ListView的每个Item中都包含一个GridView * * 注意事项: * 由于ListView和GridV

    C# ListView中添加ComboBox等控件

    通过以上步骤,你就可以在C#的ListView中成功地添加并使用ComboBox控件了。这使得用户界面更具交互性,允许用户在ListView的每一项中进行选择,极大地增强了用户体验。记住,关键在于正确地创建、添加和绑定事件到...

    C# ListView中添加多种自定义控件源码

    本主题将深入探讨如何在C#的ListView中添加和使用各种自定义控件,如CheckBox和ComboBox,以增强用户体验和功能。 一、ListView控件基础 ListView控件允许我们展示数据列表,并提供了多种视图模式,如小图标、大...

    ListView中Spinner的使用

    本篇文章将深入探讨如何在ListView中集成和使用Spinner,以及解决与之相关的事件处理和状态保持问题。 首先,Spinner的基本用法包括创建Spinner对象、设置Adapter和定义监听器。在Android中,Spinner通常通过...

    在ListView中嵌套Switch开关,点击ListView条目来切换Switch的状态

    - 为了提高ListView的滚动性能,通常会在`getView()`方法中使用convertView和ViewHolder模式。ViewHolder持有列表项中各个控件的引用,避免频繁的findViewById操作。 4. **Switch的使用**: - Switch是Android的...

    ListView中的点击事件注意及分页的功能

    在Android中,我们可以使用OnScrollListener监听ListView的滚动事件。当监听到滚动到底部时,通过网络请求或本地数据库获取下一页数据,然后添加到现有的数据集中,再次调用adapter的notifyDataSetChanged()方法。 ...

    VB中,Listview中的数据如何存入 access 的表中VISUALBASIC源码系列

    在VB中,我们可以通过ListView1.Items集合来访问和修改这些项目,通过ListView1.SubItems(index, subIndex)来获取或设置特定子项的值。 存入Access之前,我们需要创建一个与Listview对应的数据库表。表的字段数量应...

    ListView中添加CheckBox

    1、ListView item中加入checkbox后onListItemClick 事件无法触发。 原因:checkbox的优先级高于ListItem于是屏蔽了ListItem的单击事件。 解决方案:设置checkbox的android:focusable="false" 2、选择其中的...

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

    包含的文件"**C#中ListView控件的虚模式使用方法**"很可能是示例代码或者教程文档,它会详细解释如何配置和使用虚模式,包括事件处理、数据提供者的实现以及性能调优技巧。通过学习和实践这个资源,开发者可以掌握...

    C# ListView使用例子ListView排列方式演示

    在这个"C# ListView使用例子ListView排列方式演示"中,我们将深入探讨如何利用ListView来展示数据,并对其进行排序。 ListView控件在Windows Forms应用程序中扮演着重要角色,它可以用来显示文件系统、数据库或其他...

    ListView中动态添加数据

    在Android开发中,ListView是一种常用的UI组件,它允许开发者显示一组长列表的数据,通常用于展示大量可滚动的信息。本篇文章将深入探讨如何在ListView中动态添加数据,这在实际应用中是非常常见且重要的功能。 ...

    treeview和listview结合使用的例子

    在实际应用中,`TreeView`和`ListView`经常结合使用,例如在资源管理器式的界面中。当用户在`TreeView`中选择一个节点时,对应的`ListView`会更新显示与该节点相关的详细信息。这可以通过事件处理和数据绑定来实现:...

    ListView中的几种位置关系和LayoutAnimation在listview中的应用

    在ListView中使用LayoutAnimation,可以提升用户的交互体验,使数据加载或刷新过程更加生动有趣。 要实现ListView的LayoutAnimation,首先需要创建一个AnimationController,这可以通过XML动画资源或编程方式实现。...

    ListView中嵌入Gallery

    注意在`getView`方法中,为每个ListView item中的Gallery设置适配器。 最后,在Activity中设置ListView的Adapter并启动滚动: ```java ListView listView = findViewById(R.id.listView); List&lt;String&gt; ...

    连接Excel并显示在ListView中

    - 填充ListView:通过循环遍历数据,使用`ListView.Items.Add(new ListViewItem(itemArray))`添加每一行数据到ListView中,其中itemArray是对应列的值数组。 此外,还需要注意一些细节和优化点: - 错误处理:...

    ListView的基本使用带Button

    此外,如果项目中使用了`ListViewImageButton`,可能表示在ListView的条目中包含了图像和按钮。你可以仿照上述步骤,修改`list_item.xml`布局,将Button替换为ImageButton,然后在Adapter中相应地处理图片的设置和...

    ListView中使用单选和多选效果

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在某些应用场景中,我们可能需要实现ListView中的单选或多选功能,例如在创建问卷调查或设置选项时。本篇文章将详细讲解如何在ListView中实现...

    android中ListView嵌套GridView的使用

    在Android开发中,ListView和GridView是两种常用的布局控件,它们各自有其特定的应用场景。ListView主要用于展示大量的可滚动数据,而GridView则呈现一个固定的网格布局。然而,在某些情况下,我们可能需要在一个...

Global site tag (gtag.js) - Google Analytics