700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 浅谈Android列表ListView下拉刷新控件的实现(一)

浅谈Android列表ListView下拉刷新控件的实现(一)

时间:2019-03-19 20:29:39

相关推荐

浅谈Android列表ListView下拉刷新控件的实现(一)

ListView下拉刷新的功能到处可见,很多app客户端都存在,比如QQ空间好友动态下拉刷新,网易新闻内容下拉刷新等。相信很多人已经把这个功能运用的很溜,妥妥的吧,接下就来实现一下功能,有个不爽的一点就是,它是依赖第三方的库,但是我想自己自定义一个组件来实现,以后再发布自己的组件实现的ListView刷新,先用下大牛的组件库,然后提前实现这个功能。这个组件库是在github的官网下载一个包(Android_PullToRefresh.zip)这是下载链接:/chrisbanes/Android-PullToRefresh,然后解压会有四个文件夹,只有三个有用library、PullToRefreshListFragment、PullToRefreshViewPager。

以下是构建ListView刷新控件的步骤:

1、import从Github中下载Android_PullToRefresh文件夹中的三个

工程全部导入,分别为:library、PullToRefreshListFragment、PullToRefreshViewPager

2、会看到PullToRefreshListFragment、PullToRefreshViewPager这三个导入的工程有错误:

解决这个问题方法步骤是:

将PullToRefreshListFragment、PullToRefreshViewPager,右击工程,选择Property,

然后把那个有问题的library给remove掉,然后重新添加(add)library,如果还是有错,老方法,修改文件中的property中的sdk版本为你的sdk版本,我的19所以操作如图:

3、新建我们的工程UI_ListView_Refresh然后右击工程,选择Property然后依次把library、PullToRefreshListFragment、PullToRefreshViewPager三个工程添加进来

但是可能还有问题,这个问题是因为support-v4.jar版本,这三个工程不一致,所以一个很简单方法:

由于libs文件夹下添加的库的所依赖support-v4.jar版本不同,所以需要统一版本,将新建好的项目v4复制粘贴到两个(PullToRefreshListFragment、PullToRefreshViewPager)所依赖的库工程中libs文件中去,即把原来的v4的覆盖掉

4、在res文件夹中的layout中添加自定义控件

<com.handmark.pulltorefresh.library.PullToRefreshListView

android:id="@+id/Refresh_Listview"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

</com.handmark.pulltorefresh.library.PullToRefreshListView>

5、然后实现的思想是这样的:

把已经布局好的ListView通过findViewById找到这个控件,然后通过List集合去定义一个字符串类型的内容,这个也即是设置ListView中的item显示的内容

然后再定义一个ArrayAdapter对象,并把List集合的内容添加到适配器对象中去,最后在把这个适配器对象设置到我们定义的ListView中去,然后添加一个刷新的监听事件

然后重写onrefresh方法,然后new一个异步加载对象,并重写它的方法,在方法中开启一个Thread线程,并让这个线程休眠3s,以此来模拟网络通信刷新的延迟时间,然后等待3s后再在adapter中添加刷新后列表项内容,最后添加完毕后,需要调用一个以便通知更新ListView。详细见核心代码:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

RLV=(PullToRefreshListView) findViewById(R.id.Refresh_Listview);

List<String> list=new ArrayList<String>();//定义一个集合对象给ListView添加相应的内容

list.add("煎饼侠");

list.add("道士下山");

adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list);//定义一个集合适配器,并把已经添加值的list集合设置进来

RLV.setAdapter(adapter);//给ListView设置适配器

RLV.setOnRefreshListener(new OnRefreshListener<ListView>() {

//监听刷新事件,一旦刷新就触发onRefresh方法,然后异步加载一个方法,修改UI控件

@Override

public void onRefresh(PullToRefreshBase<ListView> refreshView) {

new AsyncTask<Void, Void, Void>() {//异步任务的加载

@Override

protected Void doInBackground(Void... arg0) {

try {

Thread.sleep(3000);//开启一个线程,让线程休眠3秒钟,来模拟网络通信刷新

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

protected void onPostExecute(Void result) {//然后休眠3秒后又往adapter中添加内容

adapter.add("捉妖记");

adapter.add("西游记之大圣归来");

RLV.onRefreshComplete();//执行这个方法来通知以便更新ListView

};

}.execute();

}

});

}

最后的运行效果图:

就到这了,本人Android菜鸟一枚,写下这篇文章一是希望帮助有需要的人,二是方便自己以后复习查看,三是可以见证自己一步一步的努力。前面说过这是使用第三方组件,下次争取写出自己定义的组件。

PS:这是Demo源码下载地址:/s/1sjtByVj

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。