xlistview的运用还是比较广泛的,与传统的listview相比又增加了上拉加载、下拉刷新的功能,展示数据时视觉效果良好。接下来就具体介绍一下xlistview的上下拉是如何实现的。
首先,需要在新建的工程中导入一个第三方依赖包,将之依赖到工程中,关于依赖包在github上搜索下载即可,简单快捷,当然自己封装也是可以的。在这里需要注意的是依赖包必须是library形式。
有了依赖包之后,就可以在布局文件中写布局了。
<com.limxing.xlistview.view.XListView
android:id="@+id/xlv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
给控件一个id,方便在activity中找到它,然后就需要使avtivity实现定义好的接口:
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener
这个时候工程会报错,需要重写两个方法
@Override
public void onRefresh() {
}
@Override
public void onLoadMore() {
}
适配器里的相关操作也是非常重要的,在这里采用了多条目加载的方式:
public class MyBaseAdapter extends BaseAdapter {
private Context context;
private List<JavaBean.ListBean> list;
//构造器
public MyBaseAdapter(Context context, List<JavaBean.ListBean> list) {
this.context = context;
this.list = list;
}
//上拉加载下拉刷新
public void LoadMore(List<JavaBean.ListBean> bean, boolean flag) {
for (JavaBean.ListBean b : bean) {
if (flag) {
//下拉刷新
list.add(0, b);
} else {
//上拉加载
list.add(b);
}
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public int getViewTypeCount() {
return 2;
}
//优化
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
String[] arr = list.get(i).getPic().split("\\|");
if (i % 2 == 0) {
view = View.inflate(context, R.layout.item_one, null);
ImageView img_one_first = view.findViewById(R.id.img_one_first);
ImageView img_one_second = view.findViewById(R.id.img_one_second);
ImageLoader.getInstance().displayImage(arr[0], img_one_first, MyApplication.getOptions());
ImageLoader.getInstance().displayImage(arr[1], img_one_second, MyApplication.getOptions());
} else {
view = View.inflate(context, R.layout.item_two, null);
ImageView img_two_first = view.findViewById(R.id.img_two_first);
ImageView img_two_second = view.findViewById(R.id.img_two_second);
ImageView img_two_third = view.findViewById(R.id.img_two_third);
ImageView img_two_forth = view.findViewById(R.id.img_two_forth);
ImageLoader.getInstance().displayImage(arr[0], img_two_first, MyApplication.getOptions());
ImageLoader.getInstance().displayImage(arr[1], img_two_second, MyApplication.getOptions());
ImageLoader.getInstance().displayImage(arr[0], img_two_third, MyApplication.getOptions());
ImageLoader.getInstance().displayImage(arr[1], img_two_forth, MyApplication.getOptions());
}
return view;
}
}
在MainActivity里的总体代码如下:
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{
private XListView xlv;
private int pager;
private boolean flag;
private List<JavaBean.ListBean> list;
private MyBaseAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
xlv = (XListView) findViewById(R.id.xlv);
getData();
xlv.setXListViewListener(this);
xlv.setPullLoadEnable(true);
}
//请求网络数据
public void getData(){
getInternetData("网址XXXXXXXXXX");
}
//请求数据
public void getInternetData(String path){
final String[] results = new String[1];
RequestParams params = new RequestParams(path);
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
results[0] =result;
}
//请求异常后的回调方法
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
//主动调用取消请求的回调方法
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
if (results[0]==null){//网络请求失败
return;
}
//实例化gson
Gson gson=new Gson();
//解析json字符串
JavaBean bean=gson.fromJson(results[0],JavaBean.class);
list=new ArrayList<JavaBean.ListBean>();
list=bean.getList();
if (adapter==null){
//设置适配器
adapter=new MyBaseAdapter(MainActivity.this,list);
xlv.setAdapter(adapter);
}else {
//实现上下拉
adapter.LoadMore(list,flag);
}
}
});
}
@Override
public void onRefresh() {
flag=true;
pager++;
getData();
xlv.stopRefresh(true);
}
@Override
public void onLoadMore() {
flag=false;
pager++;
getData();
xlv.stopLoadMore();
}
以上就可以实现xlistview的上下拉刷新了。
如果你喜欢这篇博客或这些代码帮助了你,请留言~