Xlistview项目主要是三部分:
- XlistView XListView主体
- XListViewHeader header
- XListViewFooter footer
控件调用:
<com.bwie.xlistview.XlistView
android:id="@+id/xlistView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
下面就是如何使用XListView,注释全面
public class HomeFragment extends Fragment {
private int page = 1;
private XlistView xlistView;
private Handler handler = new Handler();
private String path = "http://www.xieast.com/api/news/news.php?page=";
private ArrayList<Data> list;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_01, null, false);
//控件
xlistView = view.findViewById(R.id.xlistview);
//设置可上拉加载下拉刷新
xlistView.setPullLoadEnable(true);
xlistView.setPullRefreshEnable(true);
//设置XListView监听
xlistView.setXListViewListener(new XlistView.IXListViewListener() {
@Override
public void onRefresh() {
//刷新数据
page = 1;
getJsonData(path + page);
//刷新时间
getRefreshDate();
handler.postDelayed(new Runnable() {
@Override
public void run() {
xlistView.stopRefresh();
}
}, 2000);
}
@Override
public void onLoadMore() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
xlistView.stopLoadMore();
}
}, 2000);
//加载更多
page++;
getJsonData(path + page);
}
});
getRefreshDate();
getJsonData(path + page);//传进一个参数做好拼接
return view;
}
//获取当前系统时间
private void getRefreshDate() {
//时间显示格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//获取系统时间
Date date = new Date(System.currentTimeMillis());
String currentDate = simpleDateFormat.format(date);
//修改刷新时间
xlistView.setRefreshTime(currentDate);
}
//请求网络解析json方法
private void getJsonData(String path) {
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute(path);
}
//自定义AsyncTask类,实现异步加载
private class MyAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... strings) {
//获取参数
String path = strings[0];
try {
//创建url
URL url = new URL(path);
//打开该链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置请求方式
conn.setRequestMethod("GET");
//设置网络加载、读取延时
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
//获取状态码 作比较
int code = conn.getResponseCode();
if (code == HttpURLConnection.HTTP_OK) {
//网络资源
InputStream inputStream = conn.getInputStream();
//字节数组输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
//向bos写入数据
while ((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
//关流
inputStream.close();
bos.close();
//将获取到的数据返给onPostExecute方法
String json = bos.toString();
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String json) {
super.onPostExecute(json);
Log.i("xxx", "onPostExecute: " + json);
//解析展示
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(json, JsonBean.class);
//获取到json内的集合
ArrayList<Data> data = jsonBean.getData();
//参数==1的时候创建一个新的容器集合
if (page == 1) {
list = new ArrayList<>();
}
//把json的数据添加到新的容器
list.addAll(data);
//适配器
MyAdapter myAdapter = new MyAdapter(getActivity(), list);
xlistView.setAdapter(myAdapter);
//30 60 90 加载新的数据之后显示最新一页
xlistView.setSelection(myAdapter.getCount() - 29);
}
}
}
Adapter适配器也是继承BaseAdapter!!!
效果图:
这里有适配器里面的写法:https://blog.csdn.net/weixin_43917449/article/details/85798278