ViewPager作为头布局加入XilistView中实现上方自动无限轮播,且可以下拉刷新及上拉加载。
代码如下:
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener { private XListView xlv; private View view; private ViewPager vp; private String str; private MyAdapter adapter; private List<Bean.DataBean.AdlistBean> list; private List<String> xl; private List<Bean.DataBean.HotcategoryBean> xlist; private int resh=0; private int load=0; //Handler private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int num=msg.what; switch (num){ //自动轮播 case 0: int i=vp.getCurrentItem(); i++; vp.setCurrentItem(i); sendmsg(); break; } //刷新xlistView adapter.notifyDataSetChanged(); close(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化组件 xlv= (XListView) findViewById(R.id.xlv); //获取头布局文件 view=View.inflate(this,R.layout.header_item,null); //初始化头布局中的组件 vp= (ViewPager) view.findViewById(R.id.vp); //调用获取数据的方法 init(); //创建xlistView使用的适配器 adapter=new MyAdapter(); //允许上拉加载和下拉刷新 xlv.setPullLoadEnable(true); xlv.setPullRefreshEnable(true); xlv.setXListViewListener(this); //搭配适配器 xlv.setAdapter(adapter); //添加头布局 xlv.addHeaderView(view); //自动轮播 sendmsg(); } private void sendmsg(){ //延时两秒发送handler handler.sendEmptyMessageDelayed(0,2000); } //关闭方法 public void close(){ xlv.stopLoadMore(); xlv.stopRefresh(); } //重写刷新方法 @Override public void onRefresh() { handler.postDelayed(new Runnable() { @Override public void run() { xl.add(0,"刷新"+resh); resh++; } },2000); } //重写加载方法 @Override public void onLoadMore() { handler.postDelayed(new Runnable() { @Override public void run() { xl.add("加载更多"+load); load++; } },2000); } //获取数据的方法 private void init(){ //初始化list集合 list=new ArrayList<>(); xlist=new ArrayList<>(); xl=new ArrayList<>(); //判断集合是否为空 if(xl!=null){ xl.clear(); } //创建一个线程请求数据 new Thread(){ @Override public void run() { //路径 String path="http://www.meirixue.com/api.php?c=index&a=index"; try { //开始请求 URL url=new URL(path); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(3000); connection.setConnectTimeout(3000); connection.setDoInput(true); int code=connection.getResponseCode(); if(code==200){ InputStream is=connection.getInputStream(); ByteArrayOutputStream baos=new ByteArrayOutputStream(); byte[] buffer=new byte[1024]; int len=-1; while((len=is.read(buffer))!=-1){ baos.write(buffer,0,len); } str=baos.toString(); } } catch (Exception e) { e.printStackTrace(); }//处理数据 runOnUiThread(new Runnable() { @Override public void run() { //解析json字符串 Gson gson=new Gson(); Bean bean=gson.fromJson(str,Bean.class); //分别放入各自的集合 list=bean.getData().getAdlist(); xlist=bean.getData().getHotcategory(); MyViewAdapter viewAdapter=new MyViewAdapter(list,MainActivity.this); vp.setAdapter(viewAdapter); for(int i=0;i<xlist.size();i++){ xl.add(xlist.get(i).getCname()); } } }); } }.start(); } //xlistView的适配器 class MyAdapter extends BaseAdapter{ @Override public int getCount() { return xl.size(); } @Override public Object getItem(int position) { return xl.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView tv=new TextView(MainActivity.this); tv.setText(xl.get(position)); return tv; } } }
/** * Created by admin on 2017/08/22/022. * viewpager的适配器 */ public class MyViewAdapter extends PagerAdapter{ private List<Bean.DataBean.AdlistBean> list; private Context context; public MyViewAdapter(List<Bean.DataBean.AdlistBean> list,Context context){ this.list=list; this.context=context; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView iv=new ImageView(context); ImageLoader.getInstance().displayImage(list.get(position%list.size()).getImg(),iv); container.addView(iv); return iv; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }