/* * Copyright 2017 GcsSloop * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Last modified 2017-03-11 22:24:54 * * GitHub: https://github.com/GcsSloop * Website: http://www.gcssloop.com * Weibo: http://weibo.com/GcsSloop */ package com.gcssloop.diycode.base.app; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.annotation.LayoutRes; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.gcssloop.diycode.R; import com.gcssloop.diycode.hackpatch.IMMLeaks; import com.gcssloop.diycode_sdk.api.Diycode; import java.io.Serializable; public abstract class BaseActivity extends AppCompatActivity { protected Diycode mDiycode; protected ViewHolder mViewHolder; private Toast mToast; @TargetApi(Build.VERSION_CODES.KITKAT) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDiycode = Diycode.getSingleInstance(); mViewHolder = new ViewHolder(getLayoutInflater(), null, getLayoutId()); setContentView(mViewHolder.getRootView()); IMMLeaks.fixFocusedViewLeak(this.getApplication()); // 修复 InputMethodManager 引发的内存泄漏 initActionBar(mViewHolder); initDatas(); initViews(mViewHolder, mViewHolder.getRootView()); } @LayoutRes protected abstract int getLayoutId(); /** * 初始化数据,调用位置在 initViews 之前 */ protected void initDatas() { } /** * 初始化 View, 调用位置在 initDatas 之后 */ protected abstract void initViews(ViewHolder holder, View root); // 初始化 ActiobBar private void initActionBar(ViewHolder holder) { Toolbar toolbar = holder.get(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); } ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } } // 默认点击左上角是结束当前 Activity @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); break; } return super.onOptionsItemSelected(item); } public ViewHolder getViewHolder() { return mViewHolder; } /** * 发出一个短Toast * * @param text 内容 */ public void toastShort(String text) { toast(text, Toast.LENGTH_SHORT); } /** * 发出一个长toast提醒 * * @param text 内容 */ public void toastLong(String text) { toast(text, Toast.LENGTH_LONG); } private void toast(final String text, final int duration) { if (!TextUtils.isEmpty(text)) { runOnUiThread(new Runnable() { @Override public void run() { if (mToast == null) { mToast = Toast.makeText(getApplicationContext(), text, duration); } else { mToast.setText(text); mToast.setDuration(duration); } mToast.show(); } }); } } protected void openActivity(Class<?> cls) { openActivity(this, cls); } public static void openActivity(Context context, Class<?> cls) { Intent intent = new Intent(context, cls); context.startActivity(intent); } /** * 打开 Activity 的同时传递一个数据 */ protected <V extends Serializable> void openActivity(Class<?> cls, String key, V value) { openActivity(this, cls, key, value); } /** * 打开 Activity 的同时传递一个数据 */ public <V extends Serializable> void openActivity(Context context, Class<?> cls, String key, V value) { Intent intent = new Intent(context, cls); intent.putExtra(key, value); context.startActivity(intent); } }