MVP轮播

一:首先导入相应的依赖和权限

implementation 'com.squareup.okhttp3:okhttp:3.6.0'
implementation  'com.squareup.okio:okio:1.11.0'
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.google.code.gson:gson:2.2.4'

权限:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

二:布局xml

<android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="250dp"></android.support.v4.view.ViewPager>

三:接口ICallback

public interface ICllback {
    void onSuccess(Object obj);
    void onFailed(Exception e);
}

四:网络接口

public class HttpUtils {
    private static volatile HttpUtils instance;
    private OkHttpClient client;
    private Handler handler = new Handler();

    private HttpUtils(){
        client = new OkHttpClient();
    }

    public static HttpUtils getInstance() {
        if (instance == null){
            synchronized (HttpUtils.class){
                if (null == instance){
                    instance = new HttpUtils();
                }
            }
        }
        return instance;
    }
    public void get(String url, final ICllback callBack, final Type type){
        Request request=new Request.Builder().get().url(url).build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onFailed(e);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result=response.body().string();
                Gson gson = new Gson();
                final Object o = gson.fromJson(result,type);
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onSuccess(o);
                    }
                });
            }
        });

    }

}

五:Model层

public class IMdel {
    public void login(String url, ICllback callBack, Type type){
        HttpUtils.getInstance().get(url,callBack,type);
    }
}

六:View层

public interface IView<T> {
    void success(T t);
    void failed(Exception e);
}

七:Presenter层

public class IPresenter {
    private List<BannerBean.DataBean> data;
    private IView iv;
    private IMdel model;


    public void attach(IView iv) {
        this.iv = iv;
        model = new IMdel();
    }

    public void detach() {
        if (iv != null) {
            iv = null;
        }
    }
    public void Banner(String url) {

        final Type type = new TypeToken<BannerBean>() {
        }.getType();
        model.login(url, new ICllback() {
            @Override
            public void onSuccess(Object obj) {
                BannerBean banner = (BannerBean) obj;
                if (banner != null) {
                    //List<BannerBean.DataBean> data = (List<BannerBean.DataBean>) banner.getData();
                    List<BannerBean.DataBean> data = banner.getData();
                    Log.i("12432545", "success: "+data.size());
                    iv.success(data);
                }
            }

            @Override
            public void onFailed(Exception e) {
                iv.failed(e);
            }
        }, type);
    }
}

八:adapter层

public class BannerAdapter extends PagerAdapter {

    private Context context;
    private List<BannerBean.DataBean> data;

    public BannerAdapter(Context context, List<BannerBean.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ImageView imageView = new ImageView(context);
        imageView.setScaleType(imageView.getScaleType().FIT_XY);

        BannerBean.DataBean dataBean1 = data.get(position % data.size());

        String icon = dataBean1.getIcon();
        //如果需要截取接口字符串,则写这种方法
        //
Glide.with(context).load(StringUtils.httputil(icon)).into(imageView);
        //如果不需要,就写这种方法
        Glide.with(context).load(icon).into(imageView);
        container.addView(imageView);

        return imageView;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        //一定要删除 super.destroyItem(container, position, object);
        container.removeView((View) object);
    }
}

九:主页面MainActivity

public class MainActivity extends AppCompatActivity implements IView<List<BannerBean.DataBean>> {
    private ViewPager view_pager;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0) {
                int current = vp_banner.getCurrentItem();
                vp_banner.setCurrentItem(current+1);
                sendEmptyMessageDelayed(0, 2000);
            }
        }
    };

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

        view_pager = findViewById(R.id.view_pager);

        IPresenter presenter = new IPresenter();
        presenter.attach(this);
        presenter.Banner("http://www.zhaoapi.cn/ad/getAd");
    }

    @Override
    public void success(List<BannerBean.DataBean> dataBeans) {
        BannerAdapter adapter = new BannerAdapter(MainActivity.this,dataBeans);
        view_pager.setAdapter(adapter);
        handler.sendEmptyMessageDelayed(0,2000);
    }

    @Override
    public void failed(Exception e) {

    }

}

猜你喜欢

转载自blog.csdn.net/gylgww/article/details/83245041
MVP