=====================================创建的接口GET拼接====================
public interface Iwz_jk { @GET("home") Call<Bean> getCall(); } ======================================MM层========================//创建接口 public interface Imm { //观察者 public void shuju(Observer<Bean> observer); }//实现接口public class Model implements Imm{ private Bean bean; @Override public void shuju(Observer<Bean> observer) { //创建被观察者 Observable.create(new Observable.OnSubscribe<Bean>() { @Override public void call(final Subscriber<? super Bean> subscriber) { //网络请求的实例化 Retrofit retrofit=new Retrofit.Builder() .baseUrl("http://m.yunifang.com/yunifang/mobile/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); //实例化网址的接口 Iwz_jk wljk=retrofit.create(Iwz_jk.class); Call<Bean> call=wljk.getCall(); call.enqueue(new Callback<Bean>() { @Override public void onResponse(Call<Bean> call, Response<Bean> response) { bean=response.body(); subscriber.onNext(bean); subscriber.onCompleted(); } @Override public void onFailure(Call<Bean> call, Throwable t) { } }); } }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } }============================VV===========================//创建接口 public interface Ivv { public void ShowView(Bean bean); }
=============================PP==============================//接口 public interface Ipp<T> { //方法:1.绑定方法 2.解绑的方法 public void attch(T view); public void detch(); }//实现接口 public class Presenter implements Ipp<Ivv>{ Context context; Model mm; Ivv vv; SoftReference<Ivv> softReference;//软引用 public Presenter(Context context, Ivv vv) { this.context = context; attch(vv); //绑定的方法 mm=new Model(); } public void getshuju(){ //调用观察者的方法 mm.shuju(new Observer<Bean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Bean bean) { //调用方法 //vv.ShowView(bean); //软引用的调用 softReference.get().ShowView(bean); } }); } //重写的方法 绑定 @Override public void attch(Ivv view) { softReference=new SoftReference<Ivv>(view); } //解绑的方法 @Override public void detch() { softReference.clear(); } }==================================BaseAtivity=======================//创建的Activity继承泛型<T extends Ipp> public abstract class BaseActivity<T extends Ipp> extends AppCompatActivity { //定义属性 T presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); //定义抽象方法 createpresenter(); } protected abstract void createpresenter(); //销毁的方法 @Override protected void onDestroy() { super.onDestroy(); presenter.detch(); } }=====================================适配器========================public class Myadapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { Context context; Bean bean; OnItemClickLinstener listener; public Myadapter(Context context, Bean bean) { this.context = context; this.bean = bean; } //单例模式定义的多布局 public static final int TYPE_ONE=0; public static final int TYPE_TWO=1; MyViewHolder holder1; MyViewHolder2 holder2; //接口的方法实例化 //获取方法的传参值 public void setOnItemClickLinstener(OnItemClickLinstener listener) { //指定当前的值 this.listener = listener; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType==TYPE_ONE) { View view=View.inflate(context,R.layout.item,null); holder1=new MyViewHolder(view); //页面的点击事件 view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //实例化listener来调用接口的方法 强转类型 listener.OnItemClick(view, (int) view.getTag()); } }); return holder1; }else { final View view2=View.inflate(context,R.layout.item2,null); holder2=new MyViewHolder2(view2); ///页面的点击事件 view2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.OnItemClick(view2, (int) view2.getTag()); } }); return holder2; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(holder1 instanceof MyViewHolder) { holder1.tv.setText(bean.getData().getDefaultGoodsList().get(position).getGoods_name()); ImageLoaderConfiguration cf=ImageLoaderConfiguration.createDefault(context); ImageLoader.getInstance().init(cf); ImageLoader.getInstance().displayImage(bean.getData().getDefaultGoodsList().get(position).getGoods_img(),holder1.img); holder1.itemView.setTag(position); } if(holder2 instanceof MyViewHolder2) { holder2.tv2.setText(bean.getData().getDefaultGoodsList().get(position).getGoods_name()); DraweeController controller= Fresco.newDraweeControllerBuilder() .setUri(bean.getData().getDefaultGoodsList().get(position).getGoods_img()) .setAutoPlayAnimations(true) .build(); holder2.img2.setController(controller); holder2.itemView.setTag(position); } } @Override public int getItemCount() { return bean.getData().getDefaultGoodsList()==null ? 0 :bean.getData().getDefaultGoodsList().size(); } @Override public int getItemViewType(int position) { if (position%2==0) { return TYPE_ONE; }else { return TYPE_TWO; } } public class MyViewHolder extends RecyclerView.ViewHolder{ ImageView img; TextView tv; public MyViewHolder(View itemView) { super(itemView); img= (ImageView) itemView.findViewById(R.id.img); tv= (TextView) itemView.findViewById(R.id.tv); } } class MyViewHolder2 extends RecyclerView.ViewHolder{ SimpleDraweeView img2; TextView tv2; public MyViewHolder2(View itemView) { super(itemView); img2= (SimpleDraweeView) itemView.findViewById(R.id.img2); tv2= (TextView) itemView.findViewById(R.id.tv2); } } //创建接口 public interface OnItemClickLinstener{ //创建接口的方法 public void OnItemClick(View view,int position); } }
===================================MainActivity===================//继承BaseActivity<Presenter>的类 public class MainActivity extends BaseActivity<Presenter> implements Ivv { RecyclerView rv; Myadapter adapter; SwipeRefreshLayout srl; Bean bean; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Fresco.initialize(this); setContentView(R.layout.activity_main); rv= (RecyclerView) findViewById(R.id.rv); srl= (SwipeRefreshLayout) findViewById(R.id.srl); //直接P层的类实例化 调用数据 presenter=new Presenter(this,this); presenter.getshuju(); //下拉刷新 srl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { presenter.getshuju(); adapter.notifyDataSetChanged(); srl.setRefreshing(false); } }); } @Override public void ShowView(Bean bean) { LinearLayoutManager manager=new LinearLayoutManager(this); rv.setLayoutManager(manager); rv.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL)); adapter=new Myadapter(this,bean); runOnUiThread(new Runnable() { @Override public void run() { rv.setAdapter(adapter); } }); adapter.setOnItemClickLinstener(new Myadapter.OnItemClickLinstener() { @Override public void OnItemClick(View view, int position) { Toast.makeText(MainActivity.this,"你点击的是条目",Toast.LENGTH_SHORT).show(); } }); } @Override protected void createpresenter() { } }============================item1===============<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_height="match_parent"> <ImageView android:id="@+id/img" android:src="@mipmap/ic_launcher" android:layout_width="100dp" android:layout_height="100dp" /> --> <TextView android:id="@+id/tv" android:text="26565465465446" android:textSize="25dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/img" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout>
=======================================item2=====================<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="200dp" android:layout_height="200dp" android:id="@+id/img2" fresco:placeholderImage="@mipmap/ic_launcher" fresco:roundAsCircle="true"/> --> <TextView android:id="@+id/tv2" android:text="26565465465446" android:textSize="15dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/img2" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout>