为了灵活使用listView,封装了BaseAdapter

为了灵活使用listView,封装了BaseAdapter。

实现了类似iOS的tableView功能。不用事先创建好所有可能需要的控件,再在运行时动态判断显示或隐藏。极大的提高了效率和减少了代码量。

主要功能:

1.可对listView进行分组管理
2.每组都可以设置头与尾
3.每组的多行可以定义多种布局文件
4.可加载多个布局文件,从而可定制头与尾的布局文件

源码请点击github地址下载。

效果图如下:

0C5CADD9B0F72C4A98C73866C4EABA34.png

API使用非常简单,与BaseAdapter的接口类似,按照例子的方法写很容易实现,demo有两个界面,从简单实现到灵活运用。
只需要根据自己的业务创建一个Adapter继承自LXBaseAdapter,然后实现的方法查看LXBaseAdapterInterface接口选择使用。
接口方法如下:

      /**
     * 点击listView的触发方法onItemClick里调用的接口,区别点击的item、头或尾,与对应位置
     **/
    public interface LXOnListViewClick {
        public void onItemClick(LXIndexPath idnexPath);
        public void onHeaderClick(int section);
        public void onfooterClick(int section);
    }

    /**
     * 子类必须实现的方法
     **/
    //返回listview有几组
    public int getSectionInListView();
    //返回第section组有几个item行,不包括组头与组尾
    public int getCountInSection(int section);
    //创建并返回在indexPath位置的item视图(不要摄入头尾)
    public View getItemView(LXIndexPath indexPath, View convertView, ViewGroup parent);

    /**
     * 子类可选实现的方法
     **/
    /*
     * 下面两个方法若要实现必须成对实现/
     */
    //定义第section组是否需要显示头。若返回TRUE,则必须实现下面getHeaderViewInSection方法。
    public boolean showHeaderViewInSection(int section);
    //创建并返回第section组的头视图
    public View getHeaderViewInSection(int section, View convertView, ViewGroup parent);

    /*
     * 下面两个方法若要实现必须成对实现/
     */
    //定义第section组是否需要显示尾。若返回TRUE,则必须实现下面getFooterViewInSection方法。
    public boolean showFooterViewInSection(int section);
    //创建并返回第section组的尾视图
    public View getFooterViewInSection(int section, View convertView, ViewGroup parent);

    /*
     * item需要实现多种布局的接口/
     */
    //返回indexPath位置的item类型
    public int getOnlyItemViewType(LXIndexPath indexPath);
    //返回item一共有几种类型(不包含头与尾)
    public int getOnlyItemViewTypeCountSum();

    /**
     * 子类不能复写的接口
     * */
    //用于item被点击时传入position取到对应的indexPath(当row==-1代表为头视图,row==-2代表为尾视图)
    public LXIndexPath getIndexPathWithPosition(int position, LXOnListViewClick listener);

特别注意,在Activity里面监听了listView的点击事件onItemClick方法,我们需要adapter调用getIndexPathWithPosition方法才会知道点的是item或头或尾的对应位置,然后再处理相应的业务。代码如下:

  adapter.getIndexPathWithPosition(position, new LXOnListViewClick() {
    @Override
    public void onItemClick(LXIndexPath indexPath) {
        Log.e("onItemClick", "indexPath:" + indexPath.section+":"+indexPath.row);
    }

    @Override
    public void onHeaderClick(int section) {
        Log.e("onHeaderClick", "section:"+section);
    }

    @Override
    public void onfooterClick(int section) {
        Log.e("onfooterClick", "section:"+section);
    }
});

QQ:2239344645  我的github

时间: 2024-12-25 05:35:44

为了灵活使用listView,封装了BaseAdapter的相关文章

ListView 自己定义BaseAdapter实现单选打勾(无漏洞)

(假设须要完整demo,请评论留下邮箱) (眼下源代码已经不发送.假设须要源代码,加qq316701116.不喜勿扰) 近期由于一个项目的原因须要自己定义一个BaseAdapter实现ListVIew单选打勾的功能,尽管听起来非常easy,我在网上也 看过一些样例,似乎是实现了,但往往存在一些漏洞.往往漏洞例如以下 1.网上样例item较少,item增多时漏洞出现,忽略了BaseAdapter中getView()方法中convertView重用的问题 2.忽略了BaseAdapter中getVi

Android开发学习之路-自定义ListView(继承BaseAdapter)

大三学生一个,喜欢编程,喜欢谷歌,喜欢Android,所以选择的方向自然是Android应用开发,开博第一篇,希望以后会有更多的进步. 最近在做一个记账App的时候,需要一个Activity来显示每个月的消费各个项目的比例,Activity中主要用到一个ListView,ListView中包括一个TextView来显示类型的名称,一个TextView来显示所占比例,一个ProgressBar来显示进度条,让每个条目的比例更加清晰.如下图(这里只提供实现方法,界面效果暂不提供) 因为这种效果比较特

Android ListView理解之BaseAdapter

ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来.一般而言,一个ListView由以下三个元素组 成: 1.View,用于展示列表,通常是一个xml所指定的.大家都知道Android的界面基本上是由xml文件负责完成的,所以ListView的界 面也理所应当的使用了xml定义.例如在ListView中经常用到的“android.R.layout.simple_list_item_1”等, 就是Android系统内部定义好的一个xml文件. 2.适配器,用

灵活性比Listview更好的RecycleView

RecycleView:是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好. RecyclerView与ListView原理是类似的:都是仅仅维护少量的View并且可以展示大量的数据集.相同点:1.item的排列方式:两种布局管理器: LinearLayoutManager GridLayoutManager 2.操作item的时候提供默认的动画效果3.item多种布局比较方便4.封装了item的优化5.适配器不同不同点:1.分割线

Android中ListView封装收缩与展开

常有这种需求,即ListView中数据较多(不涉及分页),如果都展开,数据量较多,体验不好,所以需要提供用户查看更多.收缩数据的交互 截图如下:    如图所示,点击更多,则展开所有数据.点击收起,则自动收缩. 代码如下(主要通过继承Adapetr,控制展示的数据量getCount()方法实现,当数据量大于默认值(2)时,自动只展示2条数据,当点击更多时,则展示全部数据): (在使用这种方法前曾想自定义ListView实现,但遇到较多问题,如: 1.由于我们通过adapter设置数据,不直接调用

react-native ListView 封装 实现 下拉刷新/上拉加载更多

1.PageListView 组件封装 src/components/PageListView/index.js /** * 上拉刷新/下拉加载更多 组件 */ import React, { Component } from 'react'; import { Text, View, ListView, FlatList, Dimensions, PanResponder, Animated, Easing, ActivityIndicator, } from 'react-native';

Listview之优化BaseAdapter中的getView中的contentView

BaseAdapter中getView中改动的地方: @Override public View getView(int position, View contentView, ViewGroup arg2) { TextView textview; ImageView imageView; //判断contentView是否为空,为空重新创建 if(contentView == null){ contentView =layoutInflater.inflate(R.layout.list_i

ListView这样设置竟然导致BaseAdapter.getView疯狂执行

今天自定义ListView的BaseAdapt,却惊人发现如果在XML中ListView如下设置: <ListView android:id="@+id/place_list" android:layout_height="wrap_content" android:layout_width="wrap_content" ></ListView> 那么listView对应的BaseAdapter中的getView方法会疯狂

android listview 替代品recyclerview详解

安卓v7支持包下的ListView替代品————RecyclerView RecyclerView这个控件也出来很久了,相信大家也学习的差不多了,如果还没学习的,或许我可以带领大家体验一把这个艺术般的控件. 据官方介绍,该控件是属于之间用的非常多的ListView和GridView的替代品,既然能替代用的如此普遍的它们,这自然有其该有的优势. 1)相对于ListView而言RecyclerView的优势体现在: ①封装了之前ListView的优化,封装了之前ViewHolder的复用,这样在自定