//首先在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);}});}}