方便的XBanner、 Xrecyclerview显示

用到的权限

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

用到的依赖

   implementation 'com.squareup.okhttp3:okhttp:3.7.0'
    implementation 'com.squareup.okio:okio:1.12.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'com.xhb:xbanner:1.2.2'
    implementation 'com.github.bumptech.glide:glide:4.8.0'
    implementation 'com.jcodecraeer:xrecyclerview:1.3.2'
在这里插入代码片

View层接口

public interface IView {
     void String();
}

P层接口

public interface IPresenter {
    void GetPre();
    void GetImg();
}

Model层接口

public interface IMdodel {
     void img(String url,ImgCallback imgCallback);
     interface ImgCallback{
         void Success(String data);
         void Fail(String data);
     }
     void show(String url, Callback callback);
     interface Callback{
         void Success(String data);
     }
}

Main里面代码

public class Fragment02 extends Fragment{
    private XBanner mXbanner;
    private Presenter presenter;
    private XRecyclerView mXrecyview;
    private ShowAadpter aadpter;
    private ShowBean showBean;
    private List<ShowBean.ResultBean> result;
    private GridLayoutManager gridLayoutManager;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment02,container,false);
        mXbanner = view.findViewById(R.id.mXBanner);
        mXrecyview = view.findViewById(R.id.mXRectrView);
        gridLayoutManager = new GridLayoutManager(getContext(), 1);
        mXrecyview.setLayoutManager(gridLayoutManager);
        return view;
    }
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //实例化p层
        presenter = new Presenter(this);
        presenter.GetImg();
        presenter.GetPre();

    }
    //XBanner轮播图
    public void showimg(final String data) {
       getActivity().runOnUiThread(new Runnable() {
           @Override
           public void run() {
               Gson gson = new Gson();
               final List<String> list = new ArrayList<>();
               LunBean lunBean = gson.fromJson(data, LunBean.class);
               List<LunBean.ResultBean> result = lunBean.getResult();
               for (int i=0;i<result.size();i++){
                   list.add(result.get(i).getImageUrl());
               }
               mXbanner.setData(list,null);
               mXbanner.setmAdapter(new XBanner.XBannerAdapter(){
                   @Override
                   public void loadBanner(XBanner banner, View view, int position) {
                       Glide.with(getActivity()).load(list.get(position)).into((ImageView) view);
                   }
               });
               mXbanner.setPageTransformer(Transformer.Default);
               mXbanner.setPageChangeDuration(3000);
           }
       });
    }
//首页展示
    public void showview(final String data) {
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Gson gson = new Gson();
                showBean = gson.fromJson(data, ShowBean.class);
                result = showBean.getResult();
                aadpter = new ShowAadpter(getActivity(), result);
                mXrecyview.setAdapter(aadpter);
                //点击跳转详情页展示
                aadpter.setRecyclerviewLister(new ShowAadpter.RecyclerviewLister(){
                    @Override
                    public void callBack(int i, String id) {
                        Intent intent = new Intent(getActivity(), Main2Activity.class);
                        intent.putExtra("id", id);
                        startActivity(intent);
                    }
                });
            }
        });
    }
}

在Main层实例P层,p层代码


/*Time:2019/3/28
 *Author:zhaozhiwei
 *Description:
 */public class Presenter implements IPresenter {
     private final Model model;
     Fragment02 fragment02;
     String Base_url="http://172.17.8.100/small/commodity/v1/bannerShow";
     String Base_ur2="http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?keyword=1&page=1&count=71";
     public Presenter(Fragment02 fragment02){
        this.fragment02=fragment02;
        model = new Model();
     }
    //展示
    @Override
    public void GetPre() {
        model.show(Base_ur2 , new IMdodel.Callback() {
            @Override
            public void Success(String data) {
                fragment02.showview(data);
            }
        });
    }
//XBanner
    @Override
    public void GetImg() {
            model.img(Base_url, new IMdodel.ImgCallback() {
                @Override
                public void Success(String data) {
                    fragment02.showimg(data);
                }

                @Override
                public void Fail(String data) {
                }
            });
    }
}

在P层实例了M层,M层代码

/*Time:2019/3/28
 *Author:zhaozhiwei
 *Description:
 */public class Model implements IMdodel {

    @Override
    public void img(String url, final ImgCallback imgCallback) {
        OkHttp.getInstance().doGet(url,new okhttp3.Callback(){
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                imgCallback.Success(response.body().string());
            }
        });
    }

    @Override
    public void show(String url, final Callback callback) {
        OkHttp.getInstance().doGet(url,new okhttp3.Callback(){

            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                callback.Success(response.body().string());
            }
        });
    }
}

在P层用到了okhttp,它的封装


public class OkHttpUtilllll {
    private OkHttpClient client;
    private static OkHttpUtilllll instance;

    private OkHttpUtilllll() {
        client = new OkHttpClient.Builder()
                .writeTimeout(5000, TimeUnit.MILLISECONDS)
                .readTimeout(5000, TimeUnit.MILLISECONDS)
                .connectTimeout(5000, TimeUnit.MILLISECONDS)
                .addInterceptor(new HeaderInterceptor())
                .addInterceptor(new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
                    @Override
                    public void log(String message) {
                        if (message.startsWith("{") || message.startsWith("[")) {
                            Logger.t("======").json(message);
                        } else {
                            Logger.t("======").d(message);
                        }
                    }
                }).setLevel(HttpLoggingInterceptor.Level.BODY))
                .build();
    }

    public static OkHttpUtilllll getInstance() {
        if (instance == null) {
            instance = new OkHttpUtilllll();
        }
        return instance;
    }

    public void doGet(String url) {

        Request request = null;
        request = new Request.Builder()
                .url(url)
                .get()
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                String jsonData = response.body().string();


            }
        });

    }

    MediaType jsonType = MediaType.parse("application/json;utf-8");
    //    MediaType formType = MediaType.parse("application/json;utf-8");
    Gson gson = new Gson();

    public void doPost(String url, Map<String, Object> params) {
        Request request = null;
        RequestBody body = null;

        FormBody.Builder builder = new FormBody.Builder();

        //通过keyset遍历map
        Set<String> keySet = params.keySet();
        for (String key : keySet) {
            builder.add(key, (String) params.get(key));
        }

        Set<Map.Entry<String, Object>> entrySet = params.entrySet();

        //通过entry遍历map
//        for (Map.Entry entry : entrySet) {
//            String key = (String) entry.getKey();
//            String value = (String) entry.getValue();
//            builder.add(key, value);
//        }

        //通过迭代器遍历
//        Iterator<String> iterator = keySet.iterator();
//        while (iterator.hasNext()){
//            String next = iterator.next();
//            String value = (String) params.get(next);
//            builder.add(next,value);
//        }
        body = builder.build();
        request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });
    }
}

最后在现实页面的适配器代码

/*Time:2019/3/29
 *Author:zhaozhiwei
 *Description:
 */public class ShowAadpter extends RecyclerView.Adapter<ShowAadpter.ViewHolder> {
     Context context;
     List<ShowBean.ResultBean> list;

    public ShowAadpter(Context context, List<ShowBean.ResultBean> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, final int i) {
        final View view = LayoutInflater.from(context).inflate(R.layout.showitem,viewGroup,false);
        return new ViewHolder(view);

    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
        Glide.with(context).load(list.get(i).getMasterPic()).into(viewHolder.mImage);
        viewHolder.mText.setText(list.get(i).getCommodityName());

        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                recyclerviewLister.callBack(v.getId(),String.valueOf(list.get(i).getCommodityId()));
            }
        });


    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private final TextView mText;
        private final ImageView mImage;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            mText = itemView.findViewById(R.id.mText);
            mImage = itemView.findViewById(R.id.mImage);
        }
    }


    RecyclerviewLister recyclerviewLister;
    public void setRecyclerviewLister(RecyclerviewLister recyclerviewLister){
        this.recyclerviewLister=recyclerviewLister;
    };
    public interface RecyclerviewLister{
        void callBack(int i,String id);
    }
}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="#ced"
    android:orientation="vertical"
    android:layout_height="wrap_content">

    <com.stx.xhb.xbanner.XBanner
        android:id="@+id/mXBanner"
        android:layout_width="match_parent"
        android:layout_height="300dp"/>

    <com.jcodecraeer.xrecyclerview.XRecyclerView
        android:id="@+id/mXRectrView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

显示布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="0dp"
        android:layout_weight="3"
        android:layout_marginTop="10dp"
        android:layout_height="140dp"
        android:background="@drawable/shape_radius"
        android:id="@+id/mImage"/>
    <TextView
        android:layout_width="0dp"
        android:layout_weight="7"
        android:background="@drawable/shape_radius"
        android:gravity="center"
        android:textSize="23dp"
        android:layout_marginTop="10dp"
        android:layout_height="150dp"
        android:id="@+id/mText"/>

</LinearLayout>

public class HeaderInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Request.Builder builder = request.newBuilder();
        builder.addHeader("sessionId","123321");
        builder.addHeader("userId","1");
        return chain.proceed(builder.build());
    }
}

猜你喜欢

转载自blog.csdn.net/Android_Mr_Zhao/article/details/88934231
今日推荐