listview注意事项

来源:互联网 发布:宋思明 知乎 编辑:程序博客网 时间:2024/04/27 16:30

1.设置分割线

A.

android:divider="#fffff"  分割线颜色  android:dividerHeight="1px"  分割线高度

B.在xml文件中设置

    <!-- res/drawable/liner.xml ->      <?xmlversionxmlversion="1.0"encoding="utf-8"?>      <layer-list   xmlns:android="http://schemas.android.com/apk/res/android">       <item>         <shape>            <gradient               android:startColor="#000000"               android:centerColor="#CCCCCC"               android:endColor="#FFFFFF"               android:height="1px"               android:angle="0"/>        </shape>       </item>      </layer-list>  

在布局文件中引用

android:divider="@drawable/list_divider"  android:dividerHeight="1dip" 

2.隐藏滚动条

android:scrollbars="none"setVerticalScrollBarEnabled(true);

3.取消item点击效果

    android:listSelector="@android:color/transparent"  

4.处理空Listview

listview_lv.setEmptyView(view)

5.listview 滑动基本概念

import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ListView;import com.imooc.load.R;public class LoadListView extends ListView implements OnScrollListener {    View footer;// 底部布局;    int totalItemCount;// 总数量;    int lastVisibleItem;// 最后一个可见的item;    boolean isLoading;// 正在加载;    ILoadListener iLoadListener;    public LoadListView(Context context) {        super(context);        // TODO Auto-generated constructor stub        initView(context);    }    public LoadListView(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub        initView(context);    }    public LoadListView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        // TODO Auto-generated constructor stub        initView(context);    }    /**     * 添加底部加载提示布局到listview     *      * @param context     */    private void initView(Context context) {        LayoutInflater inflater = LayoutInflater.from(context);        footer = inflater.inflate(R.layout.footer_layout, null);        footer.findViewById(R.id.load_layout).setVisibility(View.GONE);        this.addFooterView(footer);        this.setOnScrollListener(this);    }    /*     * firstVisibleItem 当前第一个能看见的item id(从0开始)     * 滑动到底部     * if(firstVisibleItem+visibleItemCount=totalItemCount&&visibleItemCount>0)     * 判断滚动方向     * if(firstVisibleItem>lastVisibleItemPosition){     *      上滑     * }else{     *     下滑     * }     *通过一个成员变量lastVisibleItemPosition 来记录第一个可视的Item的ID并于当     *前的id进行比较     * lastVisibleItemPosition =firstVisibleItem;     */    @Override    public void onScroll(AbsListView view, int firstVisibleItem,            int visibleItemCount, int totalItemCount) {        // TODO Auto-generated method stub        this.lastVisibleItem = firstVisibleItem + visibleItemCount;        this.totalItemCount = totalItemCount;    }    /**     * 当用户没有做手势抛动的状态时,这个方法会调用2次,否则会调用3次 o     * nScrollStateChanged 三种状态 8 *     * SCROLL_STATE_TOUCH_SCROLL 正在滚动 SCROLL_STATE_FLING 手指用力滚动,     * 在离开后listview     * 由于惯性继续滑动的状态     *      */    @Override    public void onScrollStateChanged(AbsListView view, int scrollState) {        // TODO Auto-generated method stub        if (totalItemCount == lastVisibleItem) {            Log.e("totalItemCount == lastVisibleItem", "onScrollStateChanged");        }        if (totalItemCount == lastVisibleItem                && scrollState == SCROLL_STATE_IDLE) {            if (!isLoading) {                isLoading = true;                footer.findViewById(R.id.load_layout).setVisibility(                        View.VISIBLE);                // 加载更多                iLoadListener.onLoad();            }        }    }    /**     * 加载完毕     */    public void loadComplete() {        isLoading = false;        footer.findViewById(R.id.load_layout).setVisibility(View.GONE);    }    public void setInterface(ILoadListener iLoadListener) {        this.iLoadListener = iLoadListener;    }    // 加载更多数据的回调接口    public interface ILoadListener {        public void onLoad();    }    @Override    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }}

6.获取当前可视最后、第一个Item位置

//      获取可视区域内最后一个item的Id        getLastVisiblePosition();//      获取可视区域内的第一个Item的id        getFirstVisiblePosition();

7.android:fastScrollEnabled=”true”

意:默认只有当ListView的内容大于4页时,才会显示快速滑动块。类似的微信通讯录右侧边 字母快速滑动,原理应该类似。详解文章

0 0
原创粉丝点击