android ListView注意事项

所有问题,都是自己遇到过的。 但内容,有一半是自己写的,也有一半是复制过来。 所以,写成原创还请原谅

1. ListView添加标题后(addHeader())后,使用listView.getAdapter获取的对像是被Header封装后的HeaderViewListAdapter对像.所以,为了获取自定义Adapter,方法为:

HeaderViewListAdapter adapter=(HeaderViewListAdapter)dayBillListView.getAdapter();
DayReportAdapter dayAdapter=(DayReportAdapter)adapter.getWrappedAdapter();

2.item内如果有button等控件时,在监听listview的onitemclick事件时,焦点会被item内的button、imagebutton等控件抢走,从而导致在listview设置了onitemclick事件后不会被触发。解决方法是在初始化item的时候屏蔽掉其内部button等控件的焦点获取,具体方法可以在自定义item的根控件中调用:setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); 或者

在linearLayout中添加android:descendantFocusability="blocksDescendants" 同时也在button中添加android:focusable="false“
这样就能阻塞字控件抢夺焦点,listview的onitemclick就能被正确触发,同时对item内部的button等控件也没有影响,他们在被点击时照样可以触发自身的点击事件。

3.当listview需要添加headerview时,可以通过调用listview的addHeaderView(headView, null, false) 方法,该方法还有一个重载方法 addHeaderView(headView);这两个方法的区别是前一个方法可以控制header是否可以被selected,如果不想被selected则将第三个参数设置成false;

4.接着上面说的添加header,添加header时调用的addHeaderView方法必须放在listview.setadapter前面,意思很明确就是如果想给listview添加头部则必须在给其绑定adapter前添加,否则会报错。原因是当我们在调用setAdapter方法时会android会判断当前listview是否已经添加header,如果已经添加则会生成一个新的HeaderViewListAdapter,这个新的HeaderViewListAdapter包含我们设置的adapter所有内容以及listview的header和footer。所以当我们在给listview添加了header后在程序中调用listview.getadapter时返回的是tempadapter而不是我们通过setadapter传进去的adapter。如果没有设置adapter则HeaderViewListAdapter与我们自己的adapter是一样的。listview.getadapter().getcount()方法返回值会比我们预期的要大,原因是添加了header。

5. addHeaderView()的ListView,onItemSelected方法返回的position大1,因为把header也算进去了。
我们自定义adapter里面的getitem方法里面返回的position是不包括header的,是我们自定义adapter中数据position编号从0开始,也就是说与我们传进去的list的位置是一样的。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Log.i("adapter", "position:"+position); //这个position就是我们数据的真实位置
}

而listview的onitemclick方法中:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
position是当前click的位置,这个位置是指在HeaderViewListAdapter中的位置,从0开始如果listview中添加了header则0代表header。

本文转载自:http://blog.csdn.net/hutengfei0701/article/details/8494237

android ListView注意事项

时间: 2024-07-31 16:35:12

android ListView注意事项的相关文章

android ListView使用注意事项

总结本人在使用android Listview时遇到的一些应该注意的事项: 1.想要将listview item项里的子控件的点击事件交给item来处理,需要两步: (1)重写子控件的onTouchEvent方法 @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return false; } (2)在item的xml文件中的根布局加上一句: android:

Android listview addHeaderView 和 addFooterView 详解

addHeaderView()方法:主要是向listView的头部添加布局 addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加,而不能直接添加父容器中的子控件.例如:从一个xml布局文件中添加一个button控件, 只能将整个布局xml文件添加进去.而不能单单只添加button控件. 当添加头部和底部布局还有另外一个重载方法就是addHeaderView(headView, null, false) 和addFooter

Android——ListView布局+适配器(三)

Android--ListView布局+适配器(三) package com.example.administrator.newstop; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import andro

Android——ListView多布局+适配器(二)

Android--ListView多布局+适配器(二) <span style="font-size:18px;">package com.example.administrator.newstop.entity; /** * Created by Administrator on 2016/8/4. */ public class News { private String title; private String pubDate; private int img; p

Android ListView复杂列表优化实践

原文:Android ListView复杂列表优化实践 很多社交App都不免会涉及到复杂的列表元素实现,一个列表上面可能大量的图片,不定长的评论列表,给手机端的程序员带来了不少的挑战.本文就是在实现复杂的列表滑动的情况下,利用已知的优化方法指导下的一次优化实践,旨在提升ListView的滑动流畅度,为用户带来良好的体验. 1:设计稿: 这是列表中可能出现的ItemView,有两种,但是又有许多相同的地方,比如一样有点赞的图片,评论等...其中,评论和点赞的数量是可变的. 2:使用一般布局带来的问

[转]Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件

Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件. 1.为了防止拖动ListView时,在列表末尾重复数据显示.需要加入 HashMap<Integer,View> lmap = new HashMap<Integer,View>();其中Integer为列表位置,View为子项视图,加入数据前首先if (lmap.get(position)==null) ,满足条件时,加入lmap.put(position, convertView

android listview级联三菜单选择地区,本地数据库sqlite级联地区,item选中不变色

前言:因为找了N多网上的资源都没有好的解决方案,别人都是只给思路没给具体源码,真TMD纠结,干嘛求别人,自己动手才是真,最痛恨那些所谓大牛的作风,给了点点代码就让别人去想,你让我们这种小白情何于堪!!!!!!此例是基于listview来实现本地sqlite实现的! 二话不说,程序猿求的是有图有真相有源码!大家下载后有什么问题可以找到本人:QQ508181017 核心代码如下 1.数据库操作类 package com.icq.demo.db; import java.util.ArrayList;

关于android:listview getChildAt 为空的解释

今天遇到了一个很奇怪的问题,我所设定的一个listview 有10个item,当我的 list.getCount 的数量对其进行for 循环的时候,当到第6个item的时候,得到的view对象却是null,这让我很费解,经过一番查询,明白了这个问题是怎么回事,与大家分享下: 如图片红框部分的listview部分.这其实涉及到android的listview控件的内存处理问题:当我们加载listview时,如果这个listview的数据量比较多,它是显示不完全的,但这时是否是所有的数据都已经加载?

android Listview分批加载+自动加载(附源码下载)

直接上代码,代码有注释: public class TestForListviewActivity extends Activity implements OnScrollListener { private ListView mListview = null; private View mFooterView; private PaginationAdapter mAdapter; private Handler handler=new Handler(); private boolean i