java中mvp的base基类
P层的BasePresenter
public class BasePresenter<V> {
private V view ;
public void bangView(V view){
this.view = view ;
}
public V getView() {
return view;
}
public void jieView(){
view = null ;
}
}
Activity的BaseActivity
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity {
private P presenter ;
private Unbinder un ;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayout());
un = ButterKnife.bind(this);
if (presenter == null){
presenter = initPresenter();
}
if (presenter !=null){
presenter.bangView(this);
}
initData();
}
@Override
protected void onDestroy() {
super.onDestroy();
un.unbind();
presenter.jieView();
}
protected abstract int getLayout();
protected abstract P initPresenter();
protected abstract void initData();
}
Fragment的BaseFragment
public abstract class BaseFragment<P extends BasePresenter> extends Fragment {
private P presenter ;
private Unbinder un ;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getActivity(),getLayout(),null);
un = ButterKnife.bind(this,view);
if (presenter == null){
presenter = initPresenter();
}
if (presenter != null){
presenter.bangView(this);
}
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
public P getPresenter() {
return presenter;
}
@Override
public void onDestroy() {
super.onDestroy();
un.unbind();
presenter.jieView();
}
protected abstract int getLayout();
protected abstract P initPresenter();
protected abstract void initData();
//TODO 懒加载
private boolean isViewC ;
private boolean isUIV ;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
isViewC = true ;
jiazai();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser){
isUIV = true ;
jiazai();
}else{
isUIV = false ;
}
}
private void jiazai(){
if (isViewC && isUIV){
initData();
isViewC = false ;
isUIV = false ;
}
}
}