//首先在P层首先接口
//创建P层的接口 public interface Ipp<T> { //创建两个方法 1.绑定的方法 有参view 2.解除绑定的方法 public void attch(T view); public void detch(); }
//P层首先接口里面的方法 被观察者+观察者的使用
public class Presertion implements Ipp<Ivv>{ //1.上下文 2.M层的类Model 3.V层的接口 Context context; Model mm; //弱引用 WeakReference<Ivv> weakReference ; //有参构造 上下文 V层的接口 public Presertion(Context context, Ivv vv) { this.context = context; //接口的方法 attch(vv); //实例化M层的 Model 类 mm=new Model(); } //创建方法 public void getOkhttp(){ //RXjava //被观察者 Observable<Object> objectObservable=Observable.create(new Observable.OnSubscribe<Object>() { @Override public void call(final Subscriber<? super Object> subscriber) { //Model 调用shuju方法 网络获取 gson解析 mm.shuju(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { //gson解析 Gson gson=new Gson(); String www=response.body().string(); Bean bean=gson.fromJson(www,Bean.class); //调用观察者的方法 subscriber.onNext(bean); } }); } }); //观察者 objectObservable.subscribe(new Observer<Object>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { //观察者的展示方法 weakReference.get().zhanshi((Bean) o); } }); } //重写的绑定方法 @Override public void attch(Ivv view) { weakReference=new WeakReference(view); } //重写的解除绑定的方法 @Override public void detch() { Log.i("sss","sss"); weakReference.clear(); } }
//创建BaseActivity的抽象类继承接口+泛型
public abstract class BaseActivity<T extends Ipp> extends AppCompatActivity { //调用属性 T presenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //定义抽象方法 createpresenter(); } //创建方法 public abstract void createpresenter(); //解除绑定 @Override protected void onDestroy() { super.onDestroy(); presenter.detch(); } }
//在Activity的使用
public class MainActivity extends BaseActivity<Presertion> implements Ivv{ // 1.控件 2.P层的类 3.适配器 RecyclerView rv; Myadapter madapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Fresco的初始化 Fresco.initialize(this); setContentView(R.layout.activity_main); //获取id rv= (RecyclerView) findViewById(R.id.rv); //自创的方法 initData(); //调用网络获取方法 presenter.getOkhttp(); } @Override public void createpresenter() { presenter=new Presertion(this,this); } //创建的rv的方法 private void initData() { //线性管理器 LinearLayoutManager managre=new LinearLayoutManager(this); rv.setLayoutManager(managre); rv.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL)); } @Override public void zhanshi(Bean bean) { //实例化适配器传参 madapter=new Myadapter(this,bean); runOnUiThread(new Runnable() { @Override public void run() { //赋值 rv.setAdapter(madapter); } }); } }