使用xlistview加载数据+viewpager加载轮播图(imageloader图片加载)虽然是一个很常见的功能但是里面涉及的知识点却是比较多的。下面我们就将主要的代码进行揭秘。
(1)使用xlistview进行数据加载可以实现下拉刷新,下拉加载数据,同时将viewpager作为头部添加在xlistview上面。
import com.example.viewpagerlistviewdemo.adapter.ListViewAdapter;
import com.example.viewpagerlistviewdemo.util.DemoUtil;
import com.example.viewpagerlistviewdemo.util.ViewFactory;
import com.example.viewpagerlistviewdemo.view.XListView;
import com.example.viewpagerlistviewdemo.view.XListView.IXListViewListener;
import com.example.viewpagerlistviewdemo.viewpager.CycleViewPager;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity implements IXListViewListener {
// 只是用来模拟异步获取数据
private Handler handler;
private XListView mListView;
private Context context = MainActivity.this;
private View vhdf;
private CycleViewPager cycleViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler();
mListView = (XListView) findViewById(R.id.xListView);
// 设置xlistview可以加载、刷新
mListView.setPullLoadEnable(true);
mListView.setPullRefreshEnable(true);
mListView.setXListViewListener(this);
mListView.setRefreshTime(DemoUtil.getDetailTime(System.currentTimeMillis() + ""));
// listview中添加数据(20条)
mListView.setAdapter(new ListViewAdapter(context, DemoUtil.demoData()));
vhdf = LayoutInflater.from(context).inflate(R.layout.viewpager, null);
cycleViewPager = (CycleViewPager) getFragmentManager().findFragmentById(R.id.fragment_cycle_viewpager_content);
ViewFactory.initialize(context, vhdf, cycleViewPager, DemoUtil.cycData());
// listivew头部添加轮播图
mListView.addHeaderView(vhdf);
}
@Override
public void onRefresh() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
mListView.stopRefresh();
Toast.makeText(context, "刷新", 30).show();
}
}, 1000);
}
@Override
public void onLoadMore() {
// TODO Auto-generated method stub
handler.postDelayed(new Runnable() {
@Override
public void run() {
mListView.stopRefresh();
mListView.setPullLoadEnable(false);
Toast.makeText(context, "加载更多", 30).show();
}
}, 1000);
}
}
(2)实现图片轮播
package com.example.viewpagerlistviewdemo.util;
import java.util.ArrayList;
import java.util.List;
import com.example.viewpagerlistviewdemo.R;
import com.example.viewpagerlistviewdemo.model.CycleVpEntity;
import com.example.viewpagerlistviewdemo.viewpager.CycleViewPager;
import com.example.viewpagerlistviewdemo.viewpager.CycleViewPager.ImageCycleViewListener;
import com.nostra13.universalimageloader.core.ImageLoader;
import android.app.AlertDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.Toast;
public class ViewFactory {
/**
* 轮播广告图
*/
public static void initialize(final Context context,View vhdf,final CycleViewPager cycleViewPager,List<CycleVpEntity> cycentiy) {
//vhdf = getLayoutInflater().inflate(R.layout.viewpage, null);
//cycleViewPager=(CycleViewPager)getFragmentManager().findFragmentById(R.id.fragment_cycle_viewpager_content);
List<CycleVpEntity> infos = new ArrayList<CycleVpEntity>();
List<ImageView> views = new ArrayList<ImageView>();
for(int i = 0; i < cycentiy.size(); i ++){
CycleVpEntity info = new CycleVpEntity();
info.setIurl(cycentiy.get(i).getIurl());
info.setTitle(cycentiy.get(i).getTitle());
info.setCurl(cycentiy.get(i).getCurl());
infos.add(info);
}
// 将最后一个ImageView添加进来
views.add(ViewFactory.getImageView(context, infos.get(infos.size() - 1).getIurl()));
for (int i = 0; i < infos.size(); i++) {
views.add(ViewFactory.getImageView(context, infos.get(i).getIurl()));
}
// 将第一个ImageView添加进来
views.add(ViewFactory.getImageView(context, infos.get(0).getIurl()));
// 设置循环,在调用setData方法前调用
cycleViewPager.setCycle(true);
// 在加载数据前设置是否循环
cycleViewPager.setData(views, infos, new ImageCycleViewListener() {
@Override
public void onImageClick(CycleVpEntity info, int postion, View imageView) {
// TODO Auto-generated method stub
if (cycleViewPager.isCycle()) {
postion = postion - 1;
Toast.makeText(context, postion, Toast.LENGTH_SHORT).show();
// new AlertDialog(context).builder()
// .setMsg("position:"+postion)
// .setNegativeButton("确定", new OnClickListener() {
// @Override
// public void onClick(View v) {
//
// }
// }).show();
}
}
});
//设置轮播
cycleViewPager.setWheel(true);
// 设置轮播时间,默认5000ms
cycleViewPager.setTime(2000);
//设置圆点指示图标组居中显示,默认靠右
cycleViewPager.setIndicatorCenter();
}
/**
* 获取ImageView视图的同时加载显示url
*
* @param text
* @return
*/
public static ImageView getImageView(Context context, String url) {
ImageView imageView = (ImageView)LayoutInflater.from(context).inflate(
R.layout.view_banner, null);
ImageLoader.getInstance().displayImage(url, imageView);
return imageView;
}
}
//CycleViewPagerHandler
package com.example.viewpagerlistviewdemo.viewpager;
import android.content.Context;
import android.os.Handler;
/**
* 为了防止内存泄漏,定义外部类,防止内部类对外部类的引用
*/
public class CycleViewPagerHandler extends Handler {
Context context;
public CycleViewPagerHandler(Context context) {
this.context = context;
}
};
(3)图片加载使用imageloader imageloader图片加载