轮播图

本文介绍了一种使用Fragment结合MVP模式和轮播图组件实现动态加载和展示图片的方法。通过OkHttp获取网络数据,利用Handler进行消息传递控制轮播图切换,同时实现了数据的分页加载和刷新功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.test03.fragment;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.example.test03.R;
import com.example.test03.adapter.FirstAdapter;
import com.example.test03.adapter.ShowAdapter;
import com.example.test03.custom.CustomSearch;
import com.example.test03.okhttputils.OkHttpUtils;
import com.example.test03.presenter.SearchPresenter;
import com.example.test03.view.ShowView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.jwkj.libzxing.OnQRCodeScanCallback;
import com.jwkj.libzxing.QRCodeManager;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

ic class Fragment01 extends Fragment implements ShowView {

private XRecyclerView xrlv;
private CustomSearch cs;
private ViewPager vp;
private String goods1="鞋子";
private int page=1;
private SearchPresenter searchPresenter;
private ArrayList<ImageView> list;
private RadioGroup rg;
private String url="http://172.17.8.100/small/commodity/v1/bannerShow";
-----------------------------------------------------------------------------------------------------------------------------
handler开始做轮播
//handler
private Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case 0:
                String json= (String) msg.obj;
                //原生解析
                try {
                    JSONObject jsonObject = new JSONObject(json);
                    JSONArray result = jsonObject.getJSONArray("result");
                    //把集合里的数据一个个取出来  要用for循环一个一个取出来
                    for (int i=0;i<result.length();i++){
                        JSONObject jsonObject1 = result.getJSONObject(i);
                        String imageUrl = jsonObject1.getString("imageUrl");
                        //新建一个图像的集合
                        ImageView imageView = new ImageView(getActivity());
                        Glide.with(getActivity()).load(imageUrl).into(imageView);
                        list.add(imageView);
                        //加入小圆点
                        RadioButton radioButton = new RadioButton(getActivity());
                        rg.addView(radioButton);
                    }
                    //适配器
                    FirstAdapter firstAdapter = new FirstAdapter(getContext(),list);
                    //viewpager设置适配器
                    vp.setAdapter(firstAdapter);
                    //小圆点跟着动
                    rg.check(rg.getChildAt(0).getId());
                    //延迟1秒发送
                    handler.sendEmptyMessageDelayed(1,1000);


                } catch (JSONException e) {
                    e.printStackTrace();
                }
                break;
            case 1:
                int i = vp.getCurrentItem() + 1;
                vp.setCurrentItem(i);
                handler.sendEmptyMessageDelayed(1,1000);
                break;
        }

    }
};

-------------------------------------------------------------------------------适配器结束
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.frag01,null,false);

    //找控件
    xrlv = view.findViewById(R.id.xrlv);
    //得到布局管理器
    LinearLayoutManager layoutManager=new LinearLayoutManager(getContext());
    //给Xrlv设置模式
    xrlv.setLayoutManager(layoutManager);
    cs = view.findViewById(R.id.cs);
    vp = view.findViewById(R.id.vp);
    rg = view.findViewById(R.id.rg);

    //创建集合
    list = new ArrayList<>();
    getData();

    //------------------------------------------------------------------------------刷新事件--------------------------------------------------------------------
    xrlv.setLoadingListener(new XRecyclerView.LoadingListener() {
        @Override
        public void onRefresh() {

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    page=1;
                    searchPresenter.send(goods1,page);
                    xrlv.refreshComplete();
                }
            },2000);
        }

        @Override
        public void onLoadMore() {
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    page++;
                    searchPresenter.send(goods1,page);
                    xrlv.loadMoreComplete();
                }
            },2000);

        }
    });

//-------------------------------------------------------------------------------------------------------下 M V P --------------------------------------------
//实例化P层
searchPresenter = new SearchPresenter(this);
//弱引用关联
searchPresenter.attachView(this);

    //监听自定义控件
    cs.setOnSearchLisenter(new CustomSearch.OnSearchLisenter() {
        @Override
        public void onsearch(String goods) {
            goods1=goods;
            //给P层传数据
            searchPresenter.send(goods1,page);
        }
    });

    cs.setonErweimaLisenter(new CustomSearch.onErweimaLisenter() {
        @Override
        public void Erweima() {
            QRCodeManager.getInstance().with(getActivity()).setReqeustType(1).scanningQRCode(new OnQRCodeScanCallback() {
                @Override
                public void onCompleted(String s) {

                }

                @Override
                public void onError(Throwable throwable) {

                }

                @Override
                public void onCancel() {

                }
            });

        }
    });





    return view;
}

//---------------------------------------------------------------------------------------------上 M V P--------------------------------------------------------
轮播图事件
private void getData() {
//pager设置事件
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {

        }

        @Override
        public void onPageSelected(int i) {

            i=i%list.size();
            rg.check(rg.getChildAt(i).getId());
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

    //okhttp得到网络连接
    OkHttpUtils.getInstance().doGet(url, new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String json = response.body().string();
            //新建消息
            Message message = new Message();
            message.what=0;
            message.obj=json;
            //发送消息
            handler.sendMessage(message);
        }
    });

}

---------------------------轮播图 上面----------------------------------------------------------
@Override
public void Show(JSONArray result) {
Toast.makeText(getContext(), result.length()+"", Toast.LENGTH_SHORT).show();
//适配器
ShowAdapter showAdapter = new ShowAdapter(getContext(),result);
//xrlv设置适配器
xrlv.setAdapter(showAdapter);
}

@Override
public void onDestroy() {
    super.onDestroy();
    searchPresenter.deatchView();
    Log.i("zzz","销毁了");
}

}


轮播图的适配器
package com.example.test03.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.ArrayList;

ic class FirstAdapter extends PagerAdapter {
Context context;
ArrayList list;
public FirstAdapter(Context context, ArrayList list) {
this.context=context;
this.list=list;
}

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

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

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    position=position%list.size();
    ImageView imageView = list.get(position);
    container.addView(imageView);
    return imageView;
}

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值