第一步繼承AppCompatActivity 然後讓其他的類來繼承你
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在界面未初始化之前調用的初始化窗口
initWidows();
if (initArgs(getIntent().getExtras())) {
// 得到界面Id並設置到Activity界面中
int layId = getContentLayoutId();
setContentView(layId);
initBefore();
initWidget();
initData();
} else {
finish();
}
}
解釋一下 當參數初始化失敗就結束activity
第二步寫抽象方法讓子類來繼承
/**
* 初始化控件調用之前
*/
protected void initBefore() {
}
/**
* 初始化窗口
*/
protected void initWidows() {
}
/**
* 初始化相關參數
*
* @param bundle 參數Bundle
* @return 如果參數正確返回True,錯誤返回False
*/
protected boolean initArgs(Bundle bundle) {
return true;
}
/**
* 得到當前界面的資源文件Id
*
* @return 資源文件Id
*/
protected abstract int getContentLayoutId();
/**
* 初始化控件
*/
protected void initWidget() {
ButterKnife.bind(this);
}
/**
* 初始化數據
*/
protected void initData() {
}
第三步就是覆寫回退鍵方法
@Override
public boolean onSupportNavigateUp() {
// 當點擊界面導航返回時,Finish當前界面
finish();
return super.onSupportNavigateUp();
}
@Override
public void onBackPressed() {
// 得到當前Activity下的所有Fragment
@SuppressLint("RestrictedApi")
List<Fragment> fragments = getSupportFragmentManager().getFragments();
// 判斷是否爲空
if (fragments != null && fragments.size() > 0) {
for (Fragment fragment : fragments) {
// 判斷是否爲我們能夠處理的Fragment類型
if (fragment instanceof net.qiujuer.italker.common.app.Fragment) {
// 判斷是否攔截了返回按鈕
if (((net.qiujuer.italker.common.app.Fragment) fragment).onBackPressed()) {
// 如果有直接Return
return;
}
}
}
}
super.onBackPressed();
finish();
}
**
* 設置佔位佈局
*
* @param placeHolderView 繼承了佔位佈局規範的View
*/
public void setPlaceHolderView(PlaceHolderView placeHolderView) {
this.mPlaceHolderView = placeHolderView;
}
fragmnet也是差不多的步驟直接貼源碼了
public abstract class Fragment extends androidx.fragment.app.Fragment {
protected View mRoot;
protected Unbinder mRootUnBinder;
protected PlaceHolderView mPlaceHolderView;
// 標示是否第一次初始化數據
protected boolean mIsFirstInitData = true;
@Override
public void onAttach(Context context) {
super.onAttach(context);
// 初始化參數
initArgs(getArguments());
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (mRoot == null) {
int layId = getContentLayoutId();
// 初始化當前的跟佈局,但是不在創建時就添加到container裏邊
View root = inflater.inflate(layId, container, false);
initWidget(root);
mRoot = root;
} else {
if (mRoot.getParent() != null) {
// 把當前Root從其父控件中移除
((ViewGroup) mRoot.getParent()).removeView(mRoot);
}
}
return mRoot;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (mIsFirstInitData) {
// 觸發一次以後就不會觸發
mIsFirstInitData = false;
// 觸發
onFirstInit();
}
// 當View創建完成後初始化數據
initData();
}
/**
* 初始化相關參數
*/
protected void initArgs(Bundle bundle) {
}
/**
* 得到當前界面的資源文件Id
*
* @return 資源文件Id
*/
@LayoutRes
protected abstract int getContentLayoutId();
/**
* 初始化控件
*/
protected void initWidget(View root) {
mRootUnBinder = ButterKnife.bind(this, root);
}
/**
* 初始化數據
*/
protected void initData() {
}
/**
* 當首次初始化數據的時候會調用的方法
*/
protected void onFirstInit() {
}
/**
* 返回按鍵觸發時調用
*
* @return 返回True代表我已處理返回邏輯,Activity不用自己finish。
* 返回False代表我沒有處理邏輯,Activity自己走自己的邏輯
*/
public boolean onBackPressed() {
return false;
}
/**
* 設置佔位佈局
*
* @param placeHolderView 繼承了佔位佈局規範的View
*/
public void setPlaceHolderView(PlaceHolderView placeHolderView) {
this.mPlaceHolderView = placeHolderView;
}
}