//这个博客的Fragment是继承在上个博客内容之后
1,//Inter层
package com.bwei.www.fragment1022.Inter; /** * Created by asus on 2018/10/22. */ public interface INetCallBack { void success(Object obj); void failed(Exception e); }
2.//Utils
//HttpUtils
package com.bwei.www.fragment1022.utils; import android.os.Handler; import com.bwei.www.fragment1022.Inter.INetCallBack; import com.google.gson.Gson; import java.io.IOException; import java.lang.reflect.Type; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by asus on 2018/10/22. */ 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 INetCallBack 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.failed(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.success(o); } }); } }); } }
3//转换正确接口
package com.bwei.www.fragment1022.utils; /** * Created by asus on 2018/10/22. */ public class StringUtils { public static String https2Http(String url){ return url.replace("https","http"); } }
//bean层
网络获取接口进行封装
此处省略News
//MVP
4Model层
package com.bwei.www.fragment1022.MVP; import com.bwei.www.fragment1022.Inter.INetCallBack; import com.bwei.www.fragment1022.utils.HttpUtils; import java.lang.reflect.Type; /** * Created by asus on 2018/10/22. */ public class HomeModel { public void getData(String url, INetCallBack callBack, Type type){ HttpUtils.getInstance().get(url,callBack,type); } }
5,//IView层
package com.bwei.www.fragment1022.MVP; import com.bwei.www.fragment1022.bean.News; import java.util.List; /** * Created by asus on 2018/10/22. */ public interface IView { void failed(Exception e); void getBanner(List<News.DataBean> list); }
6//p层
package com.bwei.www.fragment1022.MVP; import com.bwei.www.fragment1022.Inter.INetCallBack; import com.bwei.www.fragment1022.bean.News; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.List; /** * Created by asus on 2018/10/22. */ public class HomePresenter { private IView iv; private HomeModel model; public void attach(IView iv){ this.iv = iv; model = new HomeModel(); } public void getBanner(){ String url = "http://www.zhaoapi.cn/ad/getAd"; Type type = new TypeToken<News>(){}.getType(); model.getData(url, new INetCallBack() { @Override public void success(Object obj) { News news = (News) obj; if (news != null){ List<News.DataBean> list = news.getData(); iv.getBanner(list); } } @Override public void failed(Exception e) { iv.failed(e); } },type); } }
7,//写支撑以上页面的Fragment
package com.bwei.www.fragment1022; import android.os.Bundle; 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.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.bwei.www.fragment1022.MVP.HomePresenter; import com.bwei.www.fragment1022.MVP.IView; import com.bwei.www.fragment1022.adapter.BannerAdapter; import com.bwei.www.fragment1022.bean.News; import java.util.ArrayList; import java.util.List; /** * Created by asus on 2018/10/22. */ public class MessageFragment extends Fragment implements IView { private HomePresenter presenter; private ViewPager vpPic; private RecyclerView rcProduct; private List<News.DataBean> list1; private BannerAdapter bannerAdapter; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.item_message,container,false); vpPic = v.findViewById(R.id.vp_pic); rcProduct = v.findViewById(R.id.rv_product); return v; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); list1 = new ArrayList<>(); bannerAdapter = new BannerAdapter(getActivity(),list1); vpPic.setAdapter(bannerAdapter); presenter = new HomePresenter(); presenter.attach(this); presenter.getBanner(); } @Override public void failed(Exception e) { } @Override public void getBanner(List<News.DataBean> list) { list1.clear(); list1.addAll(list); bannerAdapter.notifyDataSetChanged(); } // @Override // public void onDestroy() { // super.onDestroy(); // if (presenter != null){ // presenter.detach(); // } // } }
8,//写适配器
这个轮播图的适配器是在外面另写的
package com.bwei.www.fragment1022.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v4.view.PagerAdapter; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.bwei.www.fragment1022.bean.News; import com.bwei.www.fragment1022.utils.StringUtils; import java.util.List; /** * Created by asus on 2018/10/22. */ public class BannerAdapter extends PagerAdapter { private Context context; private List<News.DataBean> list1; public BannerAdapter(Context context, List<News.DataBean> list1) { this.context = context; this.list1 = list1; } @Override public int getCount() { return list1.size(); } @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); String s = StringUtils.https2Http(list1.get(position).getIcon()); Glide.with(context).load(s).into(imageView); container.addView(imageView); return imageView; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } }
//9/最后是布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:padding="10dp" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <SearchView android:background="@drawable/bg_back" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <android.support.v4.view.ViewPager android:id="@+id/vp_pic" android:layout_width="match_parent" android:layout_height="200dp"> </android.support.v4.view.ViewPager> //只是布局 并没有RecyclerView代码 <android.support.v7.widget.RecyclerView android:id="@+id/rv_product" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> </LinearLayout>