ViewPager无限轮播加XListview加载

来源:互联网 发布:金山恢复数据在哪里 编辑:程序博客网 时间:2024/06/05 07:33
package com.bwei.lx;

import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import view.XListView;
import view.XListView.IXListViewListener;

import bean.News;
import bean.NewsData;

import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts.Data;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;

import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;


public class MainActivity extends Activity {

    ViewPager vp;
    LinearLayout line;
    ArrayList<Integer> list=new ArrayList<Integer>();
    private MyAdapter adapter;
    XListView lv;
    NewsData data;
    MyBaseAdapter adapter2;
    List<News> list_news;
    private int n=2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp=(ViewPager) findViewById(R.id.vp);
        lv=(XListView) findViewById(R.id.lv);
        line=(LinearLayout) findViewById(R.id.line);
        list_news=new ArrayList<News>();
        initData();
        
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(MainActivity.this);
        ImageLoader.getInstance().init(configuration);
        //添加小圆点
        indoc();
        adapter = new MyAdapter();
        adapter2=new MyBaseAdapter();
         lv.setAdapter(adapter2);
        vp.setAdapter(adapter);
        vp.setCurrentItem(10000*list.size());
        lv.setPullRefreshEnable(true);
        lv.setPullLoadEnable(true);
        
        lv.setXListViewListener(new IXListViewListener() {
            
            @Override
            public void onRefresh() {
                initData1();
                adapter2.notifyDataSetChanged();
                lv.stopRefresh();
                
            }
            
            @Override
            public void onLoadMore() {
                n++;
                initData1();
                lv.stopRefresh();
                
            }
        });
        
        vp.setOnPageChangeListener(new OnPageChangeListener() {
            
            @Override
            public void onPageSelected(int arg0) {
                for (int i = 0; i < line.getChildCount(); i++) {
                    ImageView im=(ImageView) line.getChildAt(i);
                    if(i==arg0%list.size())
                    {
                        im.setImageResource(R.drawable.slidingr);
                    }
                    else {
                        im.setImageResource(R.drawable.sliding);
                    }
                }
                
            }
            
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub
                
            }
        });
        initData1();
    }
    private void initData1() {
        new AsyncTask<String, String, String>() {

            @Override
            protected String doInBackground(String... params) {
                    getData();
                   
                return null;
            }


            @Override
            protected void onPostExecute(String result) {
                adapter2.notifyDataSetChanged();
                super.onPostExecute(result);
            }
            
        }.execute();
        
    }
    private void indoc() {
        for (int i = 0; i < list.size(); i++) {
            ImageView iv=new ImageView(MainActivity.this);
            if(i==0)
            {
                iv.setImageResource(R.drawable.slidingr);
            }
            else {
                iv.setImageResource(R.drawable.sliding);
            }
            LayoutParams params=new LayoutParams(20,20);
            params.setMargins(0, 0, 5, 0);
            line.addView(iv,params);
            
        }
        
    }
    

    private void getData() {
        try {
            URL url=new URL("https://news-at.zhihu.com/api/4/news/latest");
            HttpURLConnection connection=(HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            int code=connection.getResponseCode();
            if(code==200)
            {
                 Gson gson=new Gson();
                 data=gson.fromJson(new InputStreamReader(connection.getInputStream(),"UTF-8"), NewsData.class);
                 
                 if(n!=1)
                 {
                     list_news.addAll(data.getStories());
                 }
                 else {
                     list_news=data.getStories();
                }
            }
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    private void initData() {
        list.add(R.drawable.a);
        list.add(R.drawable.b);
        list.add(R.drawable.c);
        list.add(R.drawable.d);
    }
    class MyAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
            return arg0==arg1;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View view=View.inflate(MainActivity.this, R.layout.item, null);
            ImageView img=(ImageView) view.findViewById(R.id.img);
            img.setImageResource(list.get(position%list.size()));
            container.addView(view);
            return view;
        }
        
    }
    class MyBaseAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            if(data!=null)
            {
                return data.getStories().size();
            }
            return 0;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if(convertView==null)
            {
                convertView=View.inflate(MainActivity.this, R.layout.list_item, null);
                holder=new ViewHolder();
                holder.tv_title=(TextView) convertView.findViewById(R.id.tv_title);
                holder.tv_desc=(TextView) convertView.findViewById(R.id.tv_desc);
                holder.iv=(ImageView) convertView.findViewById(R.id.iv);
                convertView.setTag(holder);
            }
            else {
                holder=(ViewHolder) convertView.getTag();
            }
            holder.tv_title.setText(data.getStories().get(position).getTitle());
            holder.tv_desc.setText(data.getStories().get(position).getGa_prefix());
            ImageLoader.getInstance().displayImage(data.getStories().get(position).getImages().get(0), holder.iv);
            
            
            
            return convertView;
        }
        class ViewHolder{
            ImageView iv;
            TextView tv_title,tv_desc;
        }
        
    }
    
}