model层的u体力是包里的Myutils
presenter层的Basepersenter和Mainpersenter
view层的activity包里的Mainactivity和iview包里的ImvpView和Mainview
utils类中
public class Utils { public static void httpGet(String url,UtilsInterface utilsInterface){ //假象这里已经x.http.get网络请求操作了 //数据回来 //需要回掉给p层 //通过接口回掉,所以这里需要建立一个借口,在本类直接建立即可,专属utils的 utilsInterface.CallBack("哈哈,我是m层的数据"); } public interface UtilsInterface{ <T>void CallBack(T mclass); } }
Basepersenter类里
public class BasePersenter <T extends IMvpview> { private T imvpview; public T getImvpview() { return imvpview; } public void setImvpview(T imvpview) { this.imvpview = imvpview; } }
Mainpersenter类里
public class Mainpersenter extends BasePersenter<MainInterface> { public void getData() { //请求数据,数据正规来说从m层毁掉回来 //在这里进行模拟 Utils.httpGet("ss", new Utils.UtilsInterface() { @Override public <T> void CallBack(T mclass) { // mclass这个参数就是m层utils传过的 //这个数据需要回掉给v层,所以需要获得v层的引用 //直接调用父类的getImvpview()方法获得v层的引用 getImvpview().CallBack((String) mclass); } }); } }
Mainactivity中
public class MainActivity extends AppCompatActivity implements View.OnClickListener,MainInterface{ private Button btn_; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btn_ = (Button) findViewById(R.id.btn_); btn_.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_: Mainpersenter mainpersenter = new Mainpersenter(); mainpersenter.setImvpview(this); mainpersenter.getData(); break; } } @Override public void CallBack(String string) { Toast.makeText(this, "vvvv=="+string, Toast.LENGTH_SHORT).show(); } }
ImvpView中
public interface IMvpview { }
MainInterface中
public interface MainInterface extends IMvpview { //MainActivity的专属接口,因为需要回掉吐司的数据 ,所以这个抽象方法的参数类型是string类型 void CallBack(String string); }