首先定义一个接口
public interface AppCreate {
//初始化方法
void initData();
//创建布局
void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle);
//获取上下文
void getContext(Context context);
View getRootview();
}
然后实现这个借口的方法
public abstract class AppCraeteIml implements AppCreate{
private View rootview;
@Override
public void initData() {
}
@Override
public void create(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
rootview=inflater.inflate(getLayoutId(),viewGroup,false);
}
@Override
public View getRootview() {
return rootview;
}
public abstract int getLayoutId();
//获取id的方法
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;
}
//创建一个点击事件
public void setOnlick(View.OnClickListener lister,int... ids){
if (ids==null){
return;
}
for (int id:ids){
get(id).setOnClickListener(lister);
}
}
}
创建Activity的父类
public abstract class BaseActivityPresenter<T extends AppCraeteIml> extends AppCompatActivity {
private T getGate;
public abstract Class<T> getClassGate();
public BaseActivityPresenter(){
try {
getGate=getClassGate().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getGate.create(getLayoutInflater(),null,savedInstanceState);
setContentView(getGate.getRootview());
getGate.getContext(this);
getGate.initData();
}
}
创建Arament的父类
public abstract class BaseFramnetPresenter<T extends AppCraeteIml> extends Fragment{
private T getGate;
public abstract Class<T> getClassGate();
public BaseFramnetPresenter(){
try {
getGate=getClassGate().newInstance();
} catch (java.lang.InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getGate.create(inflater,container,savedInstanceState);
return getGate.getRootview();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getGate.getContext(getActivity());
getGate.initData();
}
}