viewpager+gridview

bean根据接口数据生成

布局代码
activity布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.bwei.gridviewviewpager.MainActivity">

       <RelativeLayout
           android:layout_width="match_parent"
           android:layout_height="200dp"
           android:background="#fff" >

              <android.support.v4.view.ViewPager
                  android:id="@+id/viewpager"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_alignBottom="@+id/points"
                  android:layout_alignParentLeft="true"
                  android:layout_alignParentStart="true" />

              <LinearLayout
                  android:id="@+id/points"
                  android:layout_centerHorizontal="true"
                  android:layout_width="wrap_content"
                  android:layout_height="30dp"
                  android:layout_alignParentBottom="true"
                  android:layout_marginBottom="10dp"
                  android:gravity="center"
                  android:orientation="horizontal" />
       </RelativeLayout>

</RelativeLayout>


gridview布局
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:numColumns="5">

</GridView>
适配器条目
item_view
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    android:gravity="center"
    android:layout_height="match_parent">
    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:id="@+id/simpleDraw"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_name"
        />

</LinearLayout>activity

activity代码
package com.example.bwei.gridviewviewpager;

import android.graphics.Color;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.example.bwei.gridviewviewpager.adapter.MyGridViewAdpter;
import com.example.bwei.gridviewviewpager.adapter.MyViewPagerAdapter;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.viewpager)
    // ViewPager viewPager;
       ViewPager viewPager;
      private LinearLayout group;//圆点指示器
      private ImageView[] ivPoints;//小圆点图片的集合
      private int totalPage; //总的页数
      private int mPageSize = 10; //每页显示的最大的数量
      private List<ProdctBean> listDatas;//总的数据源
      private List<View> viewPagerList;//GridView作为一个View对象添加到ViewPager集合中
      //private int currentPage;//当前页

     @BindView(R.id.points)
     LinearLayout linearLayout;
    private ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        //初始化控件
                // initView();
                 //添加业务逻辑
              //   initData();
        getData();
    }
 public void getData(){
     OkHttpClient client = new OkHttpClient();
     Request request = new Request.Builder()
             .url("http://120.27.23.105/product/getCatagory")
             .build();
     client.newCall(request).enqueue(new Callback() {
         @Override
         public void onFailure(Call call, IOException e) {

         }

         @Override
         public void onResponse(Call call, final Response response) throws IOException {
             final String string = response.body().string();

             runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
                     DataDataBean dataDataBean = new Gson().fromJson(string, DataDataBean.class);
                     List<DataDataBean.DataBean> data = dataDataBean.getData();
                     initData(data);
                 }
             });

         }

     });

 }

    private void initData( List<DataDataBean.DataBean> listDatas) {
        // TODO Auto-generated method stub
        //总的页数向上取整
        totalPage = (int) Math.ceil(listDatas.size() * 1.0 / mPageSize);
        viewPagerList = new ArrayList<View>();
        for(int i = 0; i < totalPage; i++){
            //每个页面都是inflate出一个新实例
            final GridView gridView = (GridView)View.inflate(this, R.layout.item_gridview, null);
            gridView.setAdapter(new MyGridViewAdpter(MainActivity.this, listDatas, i, mPageSize));
            //添加item点击监听
            gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                                        int position, long arg3) {
                    // TODO Auto-generated method stub
                    Object obj = gridView.getItemAtPosition(position);
                    if(obj != null && obj instanceof ProdctBean){
                        System.out.println(obj);
                        Toast.makeText(MainActivity.this, ((ProdctBean)obj).getName(), Toast.LENGTH_SHORT).show();
                    }
                }
            });
            //每一个GridView作为一个View对象添加到ViewPager集合中
            viewPagerList.add(gridView);
        }
        //设置ViewPager适配器
        viewPager.setAdapter(new MyViewPagerAdapter(viewPagerList));
       // linearLayout.setBackgroundColor(Color.RED);
        for(int i = 0;i<totalPage;i++){
            iv = new ImageView(MainActivity.this);
            //循环创建小圆点,判断第一个小圆点为白色的,其他的都是透明的
            if(i == 0){
                iv.setBackgroundResource(R.drawable.shape);
            }else{
                iv.setBackgroundResource(R.drawable.shape02);
            }
            linearLayout.addView(iv);
            //设置小圆点的margin            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
            lp.setMargins(5, 10, 5, 10);
            iv.setLayoutParams(lp);
        }


    }
}


gridview适配器代码
 
 
package com.example.bwei.gridviewviewpager.adapter;

/**
 * Created by QinQinBaoBei on 2017/12/27.
 */

import java.util.List;

import com.example.bwei.gridviewviewpager.DataDataBean;
import com.example.bwei.gridviewviewpager.ProdctBean;
import com.example.bwei.gridviewviewpager.R;
import com.facebook.drawee.view.SimpleDraweeView;

import android.content.Context;
import android.net.Uri;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * GridView加载数据的适配器
 * @author Administrator
 *
 */
public class MyGridViewAdpter extends BaseAdapter{

    private Context context;
    private List<DataDataBean.DataBean> lists;//数据源
    private int mIndex;
    // 页数下标,标示第几页,从0开始
    private int mPargerSize;
    // 每页显示的最大的数量



    public MyGridViewAdpter(Context context, List<DataDataBean.DataBean> lists, int mIndex, int mPargerSize) {
        this.context = context;
        this.lists = lists;
        this.mIndex = mIndex;
        this.mPargerSize = mPargerSize;
    }

    /**
     * 先判断数据及的大小是否显示满本页lists.size() > (mIndex + 1)*mPagerSize
     * 如果满足,则此页就显示最大数量lists的个数
     * 如果不够显示每页的最大数量,那么剩下几个就显示几个
     */
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return lists.size() > (mIndex + 1) * mPargerSize ?
                mPargerSize : (lists.size() - mIndex*mPargerSize);
    }

    @Override
    public DataDataBean.DataBean getItem(int arg0) {

        return lists.get(arg0 + mIndex * mPargerSize);
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0 + mIndex * mPargerSize;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder = null;
        if(convertView == null){
            holder = new ViewHolder();
            convertView = View.inflate(context, R.layout.item_view, null);
            holder.tv_name = (TextView)convertView.findViewById(R.id.item_name);
            holder.simpleDraw = convertView.findViewById(R.id.simpleDraw);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder)convertView.getTag();
        }
        //重新确定position因为拿到的总是数据源,数据源是分页加载到每页的GridView上的
        final int pos = position + mIndex * mPargerSize;//假设mPageSiez
        //假设mPagerSize=8,假如点击的是第二页(即mIndex=1)上的第二个位置item(position=1),那么这个item的实际位置就是pos=9
        holder.tv_name.setText(lists.get(pos).getName() + "");
        holder.simpleDraw.setImageURI(Uri.parse(lists.get(pos).getIcon()));
      // 添加item监听
                convertView.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        // TODO Auto-generated method stub
                        Toast.makeText(context, "您点击了"  + lists.get(pos).getName(), Toast.LENGTH_SHORT).show();
                    }
                });
        return convertView;
    }
    static class ViewHolder{
        private TextView tv_name;
        private SimpleDraweeView simpleDraw;
    }
}

viewpager适配器
 
 
package com.example.bwei.gridviewviewpager.adapter;

/**
 * Created by QinQinBaoBei on 2017/12/27.
 */

import android.support.v4.view.PagerAdapter;

import java.util.List;

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;

/**
 * ViewPage的适配器
 *
 * @author Administrator
 */
public class MyViewPagerAdapter extends PagerAdapter {

    private List<View> viewList;//View就二十GridView


    public MyViewPagerAdapter(List<View> viewList) {
        this.viewList = viewList;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return viewList != null ? viewList.size() : 0;
    }

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

    /**
     * 将当前的View添加到ViewGroup容器中
     * 这个方法,return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPage     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        container.addView(viewList.get(position));
        return viewList.get(position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        container.removeView((View) object);
    }
}

fresco初始化
public class MyApp extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}



猜你喜欢

转载自blog.csdn.net/shilei_comeon/article/details/78928580
今日推荐