整合了刷新、加载更多、滑动删除功能的XListview

【Android界面实现】ZListView,一个最强大的刷新、加载、滑动删除的ListView控件(一) 转载请注明出处:http://blog.youkuaiyun.com/zhaokaiqiang1992    两个月之前,写过一篇文章【Android界面实现】整合了刷新、加载更多、滑动删除功能的XListview ,介绍了如何整合两个开源项目实现这种功能,但是在实际的使用中,却出现了一些问题,比如说item的点击事件多次调用,item的position不准确,代码量太大太复杂等,一个哥们在自己的工作中使用了 阅读详情


整合了刷新、加载更多、滑动删除功能的XListview                         

转载请说明出处:http://blog.youkuaiyun.com/bz419927089

如果想做带有刷新、加载更多功能的listview,我们可以使用XListview。(已经停止维护,github地址: https://github.com/Maxwin-z/XListView-Android )

如果想做带有滑动删除功能的listview,我们可以使用SwipeListview。(github地址: https://github.com/47deg/android-swipelistview )

如果想做刷新、加载更多、滑动删除的listview呢?抱歉,我暂时还没有发现同时拥有这些功能的listview。不过,我们可以整合多个开源项目,做出这样的效果。

如果要实现这个功能,我们需要两个开源项目的配合,一个就是XListview,来实现刷新加载功能,而滑动删除功能,我们则需要另外一个大神的开源项目,AndroidSwipeLayout(github地址: https://github.com/daimajia/AndroidSwipeLayout )。

话不多说,我们先看一下做出来的效果。

我感觉效果很不错,对于一般的开发需求来说,已经够了,下面,我们看一下项目的集成过程。

下面是整个项目的结构。

daimajia.swipe是AndroidSwipeLayout的代码,me.maxwin.view是XListview的代码,不需要再导入其他的lib包了。

layout文件夹下面的xlistview_footer,xlistview_header是XListview项目需要的布局文件,values文件夹下面的attrs是

SwipeLayout一些预置参数,colors是用到的两个颜色值,strings是XListview用到的字符串常量。

介绍完一些重要的文件夹,我们看一下 ListViewAdapter的代码实现。

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.daimajia.swipe.SimpleSwipeListener;
import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.adapters.BaseSwipeAdapter;

/**
 * 
 * @author zhaokaiqiang
 * 
 */
public class ListViewAdapter extends BaseSwipeAdapter {

  // 上下文对象
  private Context mContext;

  // 构造函数
  public ListViewAdapter(Context mContext) {
    this.mContext = mContext;
  }

  // SwipeLayout的布局id
  @Override
  public int getSwipeLayoutResourceId(int position) {
    return R.id.swipe;
  }

  @Override
  public View generateView(int position, ViewGroup parent) {
    View v = LayoutInflater.from(mContext).inflate(R.layout.listview_item,
        parent, false);
    final SwipeLayout swipeLayout = (SwipeLayout) v
        .findViewById(getSwipeLayoutResourceId(position));
    // 当隐藏的删除menu被打开的时候的回调函数
    swipeLayout.addSwipeListener(new SimpleSwipeListener() {
      @Override
      public void onOpen(SwipeLayout layout) {
        Toast.makeText(mContext, "Open", Toast.LENGTH_SHORT).show();
      }
    });
    // 双击的回调函数
    swipeLayout
        .setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() {
          @Override
          public void onDoubleClick(SwipeLayout layout,
              boolean surface) {
            Toast.makeText(mContext, "DoubleClick",
                Toast.LENGTH_SHORT).show();
          }
        });
    // 添加删除布局的点击事件
    v.findViewById(R.id.ll_menu).setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View arg0) {
        Toast.makeText(mContext, "delete", Toast.LENGTH_SHORT).show();
        //点击完成之后,关闭删除menu
        swipeLayout.close();
      }
    });
    return v;
  }

  //对控件的填值操作独立出来了,我们可以在这个方法里面进行item的数据赋值
  @Override
  public void fillValues(int position, View convertView) {
    TextView t = (TextView) convertView.findViewById(R.id.position);
    t.setText((position + 1) + "."<p class="p1"><span class="s1"> + </span>"我就是一行很长很长很长很长很长很长很长很长很长很长很长很长很长的测试文本"</p>);
  }

  @Override
  public int getCount() {
    return 20;
  }

  @Override
  public Object getItem(int position) {
    return position;
  }

  @Override
  public long getItemId(int position) {
    return position;
  }
}

如果我们想使用带有滑动布局的listvew,我们需要继承 BaseSwipeAdapter,然后对上面代码中提到的重要方法进行实现。

除了adapter需要改变之外,我们还需要修改listview的item的布局文件。

下面是listview_item.xml的代码实现。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="80dp" >

  <com.daimajia.swipe.SwipeLayout
    android:id="@+id/swipe"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
      android:id="@+id/ll_menu"
      android:layout_width="100dp"
      android:layout_height="match_parent"
      android:background="@android:color/holo_red_light"
      android:gravity="center" >

      <ImageView
        android:id="@+id/trash"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:src="@drawable/trash" />

      <TextView
        android:id="@+id/delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除"
        android:textColor="#ffffff"
        android:textSize="15sp" />
    </LinearLayout>

    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@drawable/item_selector"
      android:padding="6dp" >

      <TextView
        android:id="@+id/position"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </LinearLayout>
  </com.daimajia.swipe.SwipeLayout>

</LinearLayout>

整个item的布局内容需要用SwipeLayout包裹起来,然后添加id,这个id我们需要在adapter里面作为

getSwipeLayoutResourceId()的返回值。

设置好adapter之后,我们就可以在MainActivity里面为我们的xlistview添加适配器了,下面是一个简单的例子。

package com.example.swiperefreshloadlistview;

import me.maxwin.view.XListView;
import me.maxwin.view.XListView.IXListViewListener;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;

/**
 * 
 * @author zhaokaiqiang
 * 
 */
public class MainActivity extends Activity {

  private XListView mListView;
  // 只是用来模拟异步获取数据
  private Handler handler;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handler = new Handler();
    mListView = (XListView) findViewById(R.id.xListView);
    // 设置xlistview可以加载、刷新
    mListView.setPullLoadEnable(true);
    mListView.setPullRefreshEnable(true);
    // 设置回调函数
    mListView.setXListViewListener(new IXListViewListener() {

      @Override
      public void onRefresh() {
        // 模拟刷新数据,1s之后停止刷新
        handler.postDelayed(new Runnable() {

          @Override
          public void run() {
            mListView.stopRefresh();
            Toast.makeText(MainActivity.this, "refresh",
                Toast.LENGTH_SHORT).show();
          }
        }, 1000);
      }

      @Override
      public void onLoadMore() {
        handler.postDelayed(new Runnable() {
          // 模拟加载数据,1s之后停止加载
          @Override
          public void run() {
            mListView.stopLoadMore();
            Toast.makeText(MainActivity.this, "loadMore",
                Toast.LENGTH_SHORT).show();
          }
        }, 1000);

      }
    });
    // 设置适配器
    mListView.setAdapter(new ListViewAdapter(this));
  }

}

好了,完成这些之后,我们就实现了刷新、加载、滑动删除功能的多功能lixtview了。

项目的源代码,请到我的github下载。

https://github.com/ZhaoKaiQiang/SwipeRefreshLoadListview

Android上拉下拉XListView及向左侧滑删除的整合 实现上拉刷新下拉更多,及向左侧滑拖出的删除按钮。 立即下载

相关推荐

Android通过XListView实现上拉加载下拉刷新功能

主要为大家详细介绍了Android通过XListView实现上拉加载下拉刷新功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

使用python实现appium的屏幕滑动

前些日子写一个滑动手机页面的小脚本,看到大家给的内容都是swipe方法,这里对swipe方法做一个小介绍: Swipe(int start x,int start y,int end x,int y,duration) 解释:int start x-开始滑动的x坐标, int start y -开始滑动的y坐标。 int end x -结束点x坐标, int end y ...

weixin_30444105的博客 486

snipersim安装

snipersim安装记录,便于后续使用tip:snipersim需要在python2的环境下编译。

weixin_53507617的博客 918

Android实现频道列表ListView的编辑/删除/移动等功能

Android实现频道列表的编辑、删除、移动等功能,这里我把频道的部分去除掉,只是记录下来关于这个ListVIew的一些编辑、删除和移动等功能,记录下来,以便查询! 实现效果: 布局文件这里就不放了,其实就是一个ListView。 首先定义一个类,用以记录频道的基本信息,包括名字、频道号、图标等信息 package com.Javen; public class programInfo

Javen.tang的专栏 5220

WRF后处理总结:wrf-python与NCL在WRF后处理中的基本应用——变量提取、计算与可视化

判断需要提取的变量与诊断量确定后,使用getvar函数进行提取。可使用ncdump-h命令查看wrfout中的变量,wrf中的诊断量分类也可从官方文档处查阅。判断绘图类型所需的可视化绘图类型,决定了你在WRF后处理中的计算步骤。1D点线图:ll_to_xy interpline2D填色图:interplevel3D剖面图:vinterp vertcross绘图、美化色标、XY轴、标签的设置等等。

weixin_43750300的博客 1万+

ArcMap安装与配置全攻略:从下载到实战应用

本文提供了ArcMap 10.4.1从系统准备、详细安装到破解激活的完整指南,并包含首次启动的界面介绍与一个实战GIS分析项目。针对初学者,文章强调了在ArcGIS Pro成为趋势的当下,学习经典ArcMap对于理解核心概念和兼容现有工作流仍有重要价值,帮助用户避开安装常见陷阱,快速上手实战应用。

weixin_29200741的博客 340

Android XListView下拉刷新和上拉加载更多

1、首先引入xListView_lib库到自己的Demo上 2、使用步骤 它的使用步骤跟普通的ListView是一样,这也是选择它的原因。使用非常简单方便。 布局如下so easy: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas

优快云_dlt的博客 688

THUCNews新闻文本分类-tfidf+sklearn

本文使用的是和鲸社区现有数据集,代码也在和鲸社区公开,fork之后可以直接运行。 本文中所用的数据集清华NLP组提供的THUCNews新闻文本分类数据集的一个子集(原始的数据集大约74万篇文档,训练起来需要花较长的时间)。 本次训练使用了其中的体育, 财经, 房产, 家居, 教育, 科技, 时尚, 时政, 游戏, 娱乐10个分类,每个分类6500条,总共65000条新闻数据。项目在和鲸社区的平台上跑的,数据集直接引用了和鲸的数据集,每个分类6500条,总共65000条新闻数据。 数据集划分如下: cnews

wmq104的博客 4591

【Android界面实现】整合了刷新、加载更多、滑动删除功能的XListview

【Android界面实现】整合了刷新、加载更多、滑动删除功能的XListview http://blog.youkuaiyun.com/zhaokaiqiang1992/article/details/39801701 (转)   如果想做带有刷新、加载更多功能的listview,我们可以使用XListview。(已经停止维护,github地址:https://github.com/M

u010507199的专栏 1020

概率数据关联(PDA):多目标跟踪的基石算法

1. 为什么需要概率数据关联? 2. 核心思想与假设条件 3. 算法核心:概率分配与状态更新 4. 典型应用场景与优势 5. 挑战与改进方向 6. 下期预告

qq_44965657的博客 1468

CCS配置MSPM0G3507(七) 编码器(TIMER-QEI)

1.选择时钟源 BUSCLK2.时钟分频配置为1分频3.分频系数配置为14.若勾选 Start ,则生成程序后会自动开启定时器的计数,否则需手动在程序中开启5.Load Value 设置为65535。

kaneki_lh的博客 1万+

Android界面实现 整合了刷新、加载更多、滑动删除功能的XListview

【Android界面实现】整合了刷新、加载更多、滑动删除功能的XListview http://blog.youkuaiyun.com/zhaokaiqiang1992/article/details/39801701 (转)

vip573117的博客 4645

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1367

android自定义增加删除,Android-RecyclerView实现Item添加和删除

recyclerview.gifRecyclerView简介:RecyclerView用以下两种方式简化了数据的展示和处理:1. 使用LayoutManager来确定每一个item的排列方式。2. 为增加和删除项目提供默认的动画效果,也可以自定义。RecyclerView项目结构如下:Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的...

weixin_33655208的博客 961

【雕爷学编程】Arduino动手做(45)---红外光电避障传感器模块4

雕爷学编程,Arduino动手做,开源硬件,创客传感器,红外光电避障传感器模块

雕爷学编程 2505

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

列表滑动删除

效果图:整体效果还不错,欢迎拍砖: 下面上代码:MainActivity代码:public class MainActivity extends AppCompatActivity implements View.OnClickListener, SwipeLayout.OnSwipeChangedListener { private ListView listView; priv

amelons的博客 489

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android-----XlistView上拉刷新下拉加载更多

1.想要实现xlistview上拉刷新下拉加载更多必须导入xlistview文件,在file-new-ImportModule-选择路径导入-导入完成之后在xlistview下的build.gradle更改下buildToolsVersion为“25.0.1”,最下方的改为..appcompat-v7:25.0.1 2.需要同步xlistview 否则不能引用里面的方法,具体为点击file-

leehbhs的博客 783

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 【Android界面实现】ZListView,一个最强大的刷新、加载、滑动删除的ListView控件(二)
下一篇: Android XListView实现原理讲解及分析
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值