无限轮播+XListView

来源:互联网 发布:小田切让 知乎 编辑:程序博客网 时间:2024/06/05 03:27
public class Fragment02 extends Fragment implements XListView.IXListViewListener{
    String path ="http://www.meirixue.com/api.php?c=index&a=index";
    private XListView xlv;
    private LinearLayout ll;
    private ViewPager vp;
    private MyPagetAdapter pagetAdapter;
    private MyBaseAdapter baseAdapter;
    private List<Data_f2.DataBean.HotcategoryBean> hotcategory;
    private List<Data_f2.DataBean.AdlistBean> adlist;
    private List<Data_f2.DataBean.HotcategoryBean> hotcategory1= new ArrayList<>();
    private List<Data_f2.DataBean.AdlistBean> adlist1= new ArrayList<>();
    private List<ImageView> listiv;
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //得到当前的下标
            int currentItem = vp.getCurrentItem();
            currentItem++;
            vp.setCurrentItem(currentItem);
            sendMsg();
        }
    };


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment02,null);
        xlv = (XListView) view.findViewById(R.id.f2_xlv);
        return view;
    }
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //SD卡读写
        DisplayImageOptions options=new DisplayImageOptions.Builder()
                .cacheOnDisk(true)
                .cacheInMemory(true)
                .build();
        initData();
        xlv.setXListViewListener(Fragment02.this);
        xlv.setPullLoadEnable(true);
        baseAdapter = new MyBaseAdapter();
        //ViewPager的布局
        View view=View.inflate(getActivity(),R.layout.f2_vp_item,null);
        vp = (ViewPager) view.findViewById(R.id.f2_vp);
        ll = (LinearLayout) view.findViewById(R.id.f2_ll);
        //给XListview加载头布局
        xlv.addHeaderView(view);
        pagetAdapter = new MyPagetAdapter();
        vp.setCurrentItem(100000);
        //无限轮播
        sendMsg();
        //对ViewPager添加监听
        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            @Override
            public void onPageSelected(int position) {
                for (int i =0;i<listiv.size();i++){
                    if(position%adlist1.size()==i){
                        listiv.get(position%adlist.size()).setImageResource(R.drawable.dot_focuable);
                    }else {
                        listiv.get(i).setImageResource(R.drawable.dot_normal);
                    }
                }
            }
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
    }
    private void initData() {
        new AsyncTask<String,Void,String>(){

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                Gson gson =new Gson();
                Data_f2 data_f2 = gson.fromJson(s, Data_f2.class);
                //展示viewpager图片的集合
                adlist = data_f2.getData().getAdlist();
                //展示xlistview数据的集合
                hotcategory = data_f2.getData().getHotcategory();
                adlist1.addAll(adlist);
                hotcategory1.addAll(hotcategory);
                xlv.setAdapter(baseAdapter);
                vp.setAdapter(pagetAdapter);
                pagetAdapter.notifyDataSetChanged();
                baseAdapter.notifyDataSetChanged();
                //初始化点
                initDot();
            }
            @Override
            protected void onProgressUpdate(Void... values) {
                super.onProgressUpdate(values);
            }
            @Override
            protected String doInBackground(String... params) {
                 //获取Json串
                         try {
                             URL url=new URL(params[0]);
                             HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();
                             int responseCode = urlConnection.getResponseCode();
                             if(responseCode==200){
                                 InputStream inputStream = urlConnection.getInputStream();
                                 BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
                                 StringBuilder stringBuilder=new StringBuilder();
                                 String stringTemp="";
                                 while((stringTemp=bufferedReader.readLine())!=null){
                                     stringBuilder.append(stringTemp);
                                 }
                                 String result = stringBuilder.toString();
                                 return result;
                             }
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
                         return null;
                     }

        }.execute(path);
    }
    //无限轮播
    private void sendMsg() {
        handler.sendEmptyMessageDelayed(1,2000);
    }
    //初始化点
    private void initDot() {
        listiv = new ArrayList<>();
        if(listiv!=null){
            listiv.clear();
        }
        //清除LinearLayout里的所有控件
        ll.removeAllViews();
        for(int i=0;i<adlist1.size();i++){
            ImageView iv=new ImageView(getActivity());
            if(i==0){
                iv.setImageResource(R.drawable.dot_focuable);
            }else {
                iv.setImageResource(R.drawable.dot_normal);
            }
            listiv.add(iv);
            LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20,20);
            params.setMargins(10,0,10,0);
            ll.addView(iv,params);
        }
    }
    public void onlond(){
        xlv.stopLoadMore();
        xlv.stopRefresh();
        xlv.setRefreshTime("完美");
    }
    @Override
    public void onRefresh() {
        adlist1.clear();
        hotcategory1.clear();
        listiv.clear();
        initData();
        onlond();

    }
    @Override
    public void onLoadMore() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                initData();
                baseAdapter.notifyDataSetChanged();
                pagetAdapter.notifyDataSetChanged();
                onlond();
            }
        },2000);

    }
    //XListview的适配器
    class MyBaseAdapter extends BaseAdapter{
        @Override
        public int getCount() {
            return hotcategory1.size();
        }
        @Override
        public Object getItem(int position) {
            return hotcategory1.get(position);
        }
        @Override
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
           convertView=View.inflate(getActivity(),R.layout.f2_item,null);
           ImageView img= (ImageView) convertView.findViewById(R.id.f2_it_img);
           TextView tv= (TextView) convertView.findViewById(R.id.f2_it_tv);
            tv.setText(hotcategory1.get(position).getCname());
            ImageLoader.getInstance().displayImage(hotcategory1.get(position).getImg(),img);
            return convertView;
        }
    }
    //ViewPager的适配器
    class MyPagetAdapter extends PagerAdapter{
        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView iv=new ImageView(getActivity());
            ImageLoader.getInstance().displayImage(adlist1.get(position%adlist1.size()).getImg(),iv);
            container.addView(iv);
            return iv;
        }
    }
}
原创粉丝点击