*
* 1 首先要把org.com.cctest.view包导入到自己的工程下(然后修改包名)
* 2 其次把 xlistview_footer.xml和 xlistview_header.xml文件导入到自己的工程的res/layout下
* 3 然后把xlistview_arrow.png 导入到自己工程res/drawable-hdpi下
* 4 倒包 :gson-2.2.4.jar和xUtils-2.4.4.jar 到res/libs下
* 5 在xml文件下创建自定义view 全路径(org.com.cctest.view.XListView)
* 6 在MainActivity(当前所用的活动)中写逻辑代码
*/
--------------------------------------------------------------------------------------------------------------------------------------
public class MainActivity extends Activity {
// 加载的网址(接口地址)
private String refresh = "http://ic.snssdk.com/2/article/v25/stream/?category=news_tech&count=20&min_behot_time=1465266200&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1465265107&loc_mode=5&lac=4527&cid=28883&iid=4464422609&device_id=17258390367&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SAMSUNG&os_api=19&os_version=4.4.4&uuid=353040417908000&openudid=84c1c7b192991cc6";
private String more = "http://ic.snssdk.com/2/article/v25/stream/?category=news_hot&count=20&max_behot_time=1465886546&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1465889498&loc_mode=5&lac=4527&cid=28883&iid=4464422609&device_id=17258390367&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SAMSUNG&os_api=19&os_version=4.4.4&uuid=353040417908000&openudid=84c1c7b192991cc6";
// 把自定义view提为全局变量
private XListView xlv;
// 链表集合(查询方便)
private LinkedList<DataBean> list;
// 匿名内部类写handler
private Handler handler = new Handler() {
MyAdapter myAdapter;
@SuppressWarnings("unchecked")
public void handleMessage(Message msg) {
// 判断发过来的what值(int型)
switch (msg.what) {
// 加载初始化数据
case 1:
list = (LinkedList<DataBean>) msg.obj;
myAdapter = new MyAdapter();
xlv.setAdapter(myAdapter);
// 停止加载更多 ,刷新 方法
loadOver();
break;
// 刷新
case 2:
//刷新时 先清空
list.clear();
//遍历集合
for (DataBean dataBean : (LinkedList<DataBean>) msg.obj) {
// 向开头添加
list.addFirst(dataBean);
}
// 刷新适配器
myAdapter.notifyDataSetChanged();
// 刷新后停止加载
loadOver();
break;
// 加载更多
case 3:
for (DataBean dataBean : (LinkedList<DataBean>) msg.obj) {
// 向结尾添加
list.addLast(dataBean);
}
// 刷新适配器
myAdapter.notifyDataSetChanged();
loadOver();
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 寻找自定义view的控件 初始化界面
xlv = (XListView) findViewById(R.id.view);
// 给控件设置支持下拉和下滑
xlv.setPullLoadEnable(true);
xlv.setPullRefreshEnable(true);
// 初始化数据 (加载页面时就有数据)
getData(1, refresh);
// xlv的监听事件
xlv.setXListViewListener(new IXListViewListener() {
@Override
// 刷新
public void onRefresh() {
getData(2, refresh);
}
@Override
// 加载
public void onLoadMore() {
getData(3, more);
}
});
}
// 通过i的值进行判断 是刷新还是加载 path是数据的接口地址
private void getData(final int i, String path) {
// 实例化httpUtils
HttpUtils httpUtils = new HttpUtils();
// 无论什么时间刷新 都能刷出来
httpUtils.configCurrentHttpCacheExpiry(0);
// httpUtils进行请请求 个体方式
// 1 请求方式 2请求的接口地址 3 请求返回的接口数据
httpUtils.send(HttpMethod.GET, path, new RequestCallBack<String>() {
@Override
// 请求失败
public void onFailure(HttpException arg0, String arg1) {
}
@Override
// 请求成功
public void onSuccess(ResponseInfo<String> arg0) {
// 获得当前返回的json串
String result = arg0.result;
// 实例化Gson
Gson gson = new Gson();
// 封装
Data data = gson.fromJson(result, Data.class);
Message msg = Message.obtain();
msg.obj = data.getData();
msg.what = i;
handler.sendMessage(msg);
}
});
}
// 停止加载更多/刷新
public void loadOver() {
// 停止加载更多
xlv.stopLoadMore();
// 停止刷新
xlv.stopRefresh();
// 设置刷新时的时间
xlv.setRefreshTime(getTime());
}
// 格式化时间
@SuppressLint("SimpleDateFormat")
public String getTime() {
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
Date date = new Date();
String time = format.format(date);
return time;
}
// 适配器
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(MainActivity.this,
android.R.layout.simple_list_item_1, null);
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
text1.setText(list.get(position).getTitle());
return view;
}
}
}