mysql安卓下拉刷新重复数据_安卓实现下拉刷新效果

先上效果图:

0eab37b84287605b35158b8054b99e5d.gif

使用网络应用时,比如QQ、微信这些,我们经常会通过下拉实现消息的刷新。下面记录一种通过调用第三方文件实现下拉刷新ListView的方法

步骤一、先在github中搜索Android-PullToRefresh-master并下载

步骤二、在AndroidStudio中新建一个项目,右键Importt Module导入Android-PullToRefresh-master中的library文件(注意调整好项目的sdk和jdk版本)如何导入类库文件?

步骤三、复制类库文件library中的PullToRefreshListView.java的路径到自己新建的项目中的布局文件中,并给它添加宽高和id,如下

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.contentprovide.liuliu.demo_3_3_7.MainActivity">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/my_listview"

>

步骤四、在java文件中使用集合和适配器给集合添加列表项内容,在异步线程中处理刷新行为,并且在ListView对象中的监听事件中执行异步线程

package com.contentprovide.liuliu.demo_3_3_7;

import android.os.AsyncTask;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import com.handmark.pulltorefresh.library.PullToRefreshBase;

import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {

PullToRefreshListView my_listview;

//定义一个集合对象用于存放listview的列表项内容

List list;

// 定义一个ListView适配器

ArrayAdapter arrayAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

my_listview = (PullToRefreshListView) findViewById(R.id.my_listview);

list = new ArrayList<>();

list.add("Item1");

list.add("Item2");

list.add("Item3");

list.add("Item4");

arrayAdapter = new ArrayAdapter(this,R.layout.support_simple_spinner_dropdown_item,list);

// 把适配器添加ListView对象中

my_listview.setAdapter(arrayAdapter);

// 设置事件监听器

my_listview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener() {

@Override

public void onRefresh(PullToRefreshBase refreshView) {

// 执行异步线程

asyncTask.execute();

}

});

}

// 在异步线程中处理刷新行为

AsyncTask asyncTask = new AsyncTask() {

@Override

protected Void doInBackground(Void... voids) {

// 手动休眠三秒,模仿从服务器端获取信息的延迟

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

return null;

}

@Override

protected void onPostExecute(Void aVoid) {

super.onPostExecute(aVoid);

list.add("新增加的Item1");

list.add("新增加的Item2");

// 通知ListView对象刷新完成

my_listview.onRefreshComplete();

}

};

}

今天看到之前写的这篇博客突然发现了一个问题,我上面写的这个刷新程序当我连续下拉刷新了两次之后程序就会崩溃强制弹出,后来重新看了一遍代码发现是线程执行那里的问题。AsyncTask的对象是只能执行一次的 ,如果我需要执行同一个线程对象多次可以使用匿名对象,每一次都用一个新的对象去执行。下面是我更新后的步骤四的代码,其他步骤没有问题:

package com.contentprovide.liuliu.demo_3_3_7;

import android.os.AsyncTask;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import com.handmark.pulltorefresh.library.PullToRefreshBase;

import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;

import java.util.List;public classMainActivity extends AppCompatActivity {

PullToRefreshListView my_listview;//定义一个集合对象用于存放listview的列表项内容

Listlist;//定义一个ListView适配器

ArrayAdapterarrayAdapter;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

my_listview=(PullToRefreshListView) findViewById(R.id.my_listview);

list= new ArrayList<>();

list.add("Item1");

list.add("Item2");

list.add("Item3");

list.add("Item4");

arrayAdapter= new ArrayAdapter(this,R.layout.support_simple_spinner_dropdown_item,list);//把适配器添加ListView对象中

my_listview.setAdapter(arrayAdapter);//设置事件监听器

my_listview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener() {

@Overridepublic void onRefresh(PullToRefreshBaserefreshView) {//执行异步线程

new AsyncTask() {

@Override

protectedVoid doInBackground(Void... voids) {

// 手动休眠三秒,模仿从服务器端获取信息的延迟

try{

Thread.sleep(3000);

} catch(InterruptedException e) {

e.printStackTrace();

}

return null;

}

@Override

protected voidonPostExecute(Void aVoid) {

super.onPostExecute(aVoid);

list.add("新增加的Item1");

list.add("新增加的Item2");

// 通知ListView对象刷新完成

my_listview.onRefreshComplete();

}

};

.execute(); } });

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值