这是自己刚刚学到的MVP框架,写了一些并且写了比较完善,还有findId,onclick,一些简单的优化
让我们在搭建完框架之后,能够体验到框架的好处,那么下边我们开始吧!
首先创建mvp的package
接着在里边创建view层和presenter层
首先是view层
在view根目录里创建
public interface AppCreate { void initData();//初始化方法 View getRootView();//获取view void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle);//创建布局 }
public abstract class AppCreateImp implements Icontract.IAppCreate { private View rootview; @Override public void initData() { } @Override public View getRootView() { return rootview; } @Override public void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) { rootview = inflater.inflate(getLayoutId(),viewGroup,false); } /** * 获取id * @return */ public abstract int getLayoutId(); private SparseArray<View> views = new SparseArray<>(); public <T extends View> T get(int id){ T view = (T) views.get(id); if (view == null){ view = rootview.findViewById(id); views.put(id,view); } return view; } /** * 点击事件 * @param listener * @param ids */ public void setClick(View.OnClickListener listener,int ...ids){ if (ids == null){ return; } for (int id:ids){ get(id).setOnClickListener(listener); } } }
接着到precenter层
在根目录下创建
public abstract class BaseActivityPresenter<T extends AppCreate> extends AppCompatActivity { private T appCreat; public abstract Class<T> getAppCreateClass(); public BaseActivityPresenter(){ try { appCreat = getAppCreateClass().newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); appCreat.create(getLayoutInflater(),null,savedInstanceState); setContentView(appCreat.getRootView()); appCreat.initData(); } }
public abstract class BaseFragmentPresenter<T extends AppCreate> extends Fragment { private T appCreat; public abstract Class<T> getAppCreateClass(); public BaseFragmentPresenter(){ try { appCreat = getAppCreateClass().newInstance(); } catch (java.lang.InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { appCreat.create(getLayoutInflater(),null,savedInstanceState); return appCreat.getRootView(); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); appCreat.initData(); } }
这里创建的是“契约类” 作用是:
设计模式的接口隔离原则是指客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上
最后在中继承一下 public interface Icontract { interface IAppCreate extends AppCreate{ Context getContext(); } }