public interface Delegate {
void initData();
void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle);
View rootView();
void getContext(Context context);
}
public abstract class AppDelegate implements Delegate {
private View rooView;
@Override
public void initData() {
}
@Override
public void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
rooView = inflater.inflate(getLayoutId(),viewGroup,false);
}
@Override
public View rootView() {
return rooView;
}
public <T extends View> T get(int id){
return rooView.findViewById(id);
}
public void setOnclick(View.OnClickListener listener,int...ids){
if (ids==null){
return;
}
for (int id:ids){
get(id).setOnClickListener(listener);
}
}
@Override
public void getContext(Context context) {
}
public abstract int getLayoutId();
}
public abstract class BaseActivityPresenter<T extends AppDelegate> extends AppCompatActivity {
private T delegate;
public abstract Class<T> getClassDelegate();
public BaseActivityPresenter(){
try {
delegate = getClassDelegate().newInstance();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
delegate.getContext(this);
delegate.create(getLayoutInflater(),null,savedInstanceState);
delegate.initData();
setContentView(delegate.rootView());
}
}
public abstract class BaseFragmentPresenter<T extends AppDelegate> extends Fragment {
private T delegate;
public abstract Class<T> getClassDelegate();
public BaseFragmentPresenter(){
try {
delegate = getClassDelegate().newInstance();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (java.lang.InstantiationException e) {
e.printStackTrace();
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
delegate.create(getLayoutInflater(),null,savedInstanceState);
return delegate.rootView();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
delegate.getContext(getActivity());
delegate.initData();
}
}