XListView的下拉刷新,上拉加载
MainActivity类
public class MainActivity extends Activity {
//全局变量
private List<NewsListData> list = new ArrayList<NewsListData>();
XListView xlv;
MyXListViewAdapter adapter;
int path = 1;
boolean flag=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
xlv=(XListView) findViewById(R.id.xlv);
//调用异步加载数据的方法
initData();
//创建适配器
adapter=new MyXListViewAdapter();
//设置适配器
xlv.setAdapter(adapter);
//设置下拉刷新状态
xlv.setPullRefreshEnable(true);
//设置上拉加载状态
xlv.setPullLoadEnable(true);
//设置下拉刷新的时间
xlv.setRefreshTime("2017-10-18");
//XListView的点击
xlv.setXListViewListener(new IXListViewListener() {
@Override
public void onRefresh() {
//如果flag为false就下拉刷新数据
flag=false;
//刷新数据为最初数据
path=1;
//调用异步加载数据的方法
initData();
//吐司
Toast.makeText(MainActivity.this, "path目前等于:"+path, 0).show();
//停止刷新
xlv.stopRefresh();
}
@Override
public void onLoadMore() {
// 如果flag=true;就上拉加载数据
flag=true;
path++;
//调用异步加载数据的方法
initData();
//吐司
Toast.makeText(MainActivity.this, "path目前等于:"+path, 0).show();
//停止加载
xlv.stopLoadMore();
}
});
}
//创建适配器
public class MyXListViewAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
if (list != null) {
return list.size();
}
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 优化
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(MainActivity.this,
R.layout.list_item, null);
holder = new ViewHolder();
holder.tv_ctime = (TextView) convertView
.findViewById(R.id.tv_ctime);
holder.tv_title = (TextView) convertView
.findViewById(R.id.tv_title);
holder.tv_description = (TextView) convertView
.findViewById(R.id.tv_description);
holder.tv_url = (TextView) convertView
.findViewById(R.id.tv_url);
holder.iv_picUrl = (ImageView) convertView
.findViewById(R.id.iv_picUrl);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv_ctime.setText(list.get(position).getCtime());
holder.tv_title.setText(list.get(position).getTitle());
holder.tv_description.setText(list.get(position).getDescription());
holder.tv_url.setText(list.get(position).getUrl());
ImageLoader.getInstance().displayImage(list.get(position).getPicUrl(), holder.iv_picUrl);
return convertView;
}
}
//优化帮助类
private static class ViewHolder {
TextView tv_ctime, tv_title, tv_description, tv_url;
ImageView iv_picUrl;
}
//异步加载数据的方法
public void initData() {
new AsyncTask<String, String, String>() {
@Override
protected String doInBackground(String... params) {
// 调用 方法
getData();
return null;
}
@Override
protected void onPostExecute(String result) {
// 刷新适配器
adapter.notifyDataSetChanged();
super.onPostExecute(result);
}
}.execute();
}
//获取网络数据的方法
public void getData() {
try {
URL url = new URL(
"https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="
+ path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
int code = conn.getResponseCode();
if (code == 200) {
//Gson解析
Gson gson = new Gson();
JsonData json = gson.fromJson(
new InputStreamReader(conn.getInputStream()),
JsonData.class);
//如果fls为true就把json.getNewslist()拼接进去进行加载数据
//else就走list=json.getNewslist();
if (flag) {
//list.addAll拼接
list.addAll(json.getNewslist());
} else {
list=json.getNewslist();
}
Log.i("+++++++++++++++++++++++", list+"");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Layout布局
<?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="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="30dp"
android:orientation="horizontal"
>
<TextView
android:id="@+id/tv_ctime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
<ImageView
android:id="@+id/iv_picUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>