package ren.solid.materialdesigndemo.activity;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import ren.solid.library.activity.base.BaseActivity;
import ren.solid.library.fragment.WebViewFragment;
import ren.solid.library.utils.SnackBarUtils;
import ren.solid.library.utils.ViewUtils;
import ren.solid.materialdesigndemo.R;
import ren.solid.materialdesigndemo.fragment.AboutFragment;
import ren.solid.materialdesigndemo.fragment.BlogFragment;
import ren.solid.materialdesigndemo.fragment.ChangeSkinFragment;
import ren.solid.materialdesigndemo.fragment.CustomViewFragment;
import ren.solid.materialdesigndemo.fragment.GanHuoFragment;
import ren.solid.materialdesigndemo.fragment.MainFragment;
import ren.solid.materialdesigndemo.fragment.SnackBarFragment;
public class MainActivity extends BaseActivity {
private static String TAG = "MainActivity";
private DrawerLayout mDrawerLayout;//侧边菜单视图
private ActionBarDrawerToggle mDrawerToggle; //菜单开关
private Toolbar mToolbar;
private NavigationView mNavigationView;//侧边菜单项
private FragmentManager mFragmentManager;
private Fragment mCurrentFragment;
private MenuItem mPreMenuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null)
Log.i(TAG, "NULL");
else {
Log.i(TAG, "NOT NULL");
}
}
@Override
protected int setLayoutResourceID() {
return R.layout.activity_main;
}
@Override
protected void init() {
mFragmentManager = getSupportFragmentManager();
}
@Override
protected void setUpView() {
mToolbar = $(R.id.toolbar);
mDrawerLayout = $(R.id.drawer_layout);
mNavigationView = $(R.id.navigation_view);
mToolbar.setTitle("首页");
//这句一定要在下面几句之前调用,不然就会出现点击无反应
setSupportActionBar(mToolbar);
setNavigationViewItemClickListener();
//ActionBarDrawerToggle配合Toolbar,实现Toolbar上菜单按钮开关效果。
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close);
mDrawerToggle.syncState();
mDrawerLayout.setDrawerListener(mDrawerToggle);
mToolbar.setNavigationIcon(R.drawable.ic_drawer_home);
initDefaultFragment();
dynamicAddSkinEnableView(mToolbar, "background", R.color.colorPrimary);
dynamicAddSkinEnableView(mNavigationView.getHeaderView(0), "background", R.color.colorPrimary);
dynamicAddSkinEnableView(mNavigationView, "navigationViewMenu", R.color.colorPrimary);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
//super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState");
}
//init the default checked fragment
private void initDefaultFragment() {
Log.i(TAG, "initDefaultFragment");
mCurrentFragment = ViewUtils.createFragment(MainFragment.class);
mFragmentManager.beginTransaction().add(R.id.frame_content, mCurrentFragment).commit();
mPreMenuItem = mNavigationView.getMenu().getItem(0);
mPreMenuItem.setChecked(true);
}
private void setNavigationViewItemClickListener() {
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
if (null != mPreMenuItem) {
mPreMenuItem.setChecked(false);
}
switch (item.getItemId()) {
case R.id.navigation_item_home:
mToolbar.setTitle("首页");
switchFragment(MainFragment.class);
break;
case R.id.navigation_item_ganhuo:
mToolbar.setTitle(getString(R.string.ganhuo));
switchFragment(GanHuoFragment.class);
break;
case R.id.navigation_item_blog:
mToolbar.setTitle("我的博客");
switchFragment(BlogFragment.class);
break;
case R.id.navigation_item_custom_view:
mToolbar.setTitle("自定义View");
switchFragment(CustomViewFragment.class);
break;
case R.id.navigation_item_snackbar:
mToolbar.setTitle("Snackbar演示");
switchFragment(SnackBarFragment.class);
break;
case R.id.navigation_item_switch_theme:
mToolbar.setTitle("主题换肤");
switchFragment(ChangeSkinFragment.class);
break;
case R.id.navigation_item_about:
mToolbar.setTitle("关于");
switchFragment(AboutFragment.class);
break;
default:
break;
}
item.setChecked(true);
mDrawerLayout.closeDrawer(Gravity.LEFT);
mPreMenuItem = item;
return false;
}
});
}
//切换Fragment
private void switchFragment(Class<?> clazz) {
Fragment to = ViewUtils.createFragment(clazz);
if (to.isAdded()) {
Log.i(TAG, "Added");
mFragmentManager.beginTransaction().hide(mCurrentFragment).show(to).commitAllowingStateLoss();
} else {
Log.i(TAG, "Not Added");
mFragmentManager.beginTransaction().hide(mCurrentFragment).add(R.id.frame_content, to).commitAllowingStateLoss();
}
mCurrentFragment = to;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main_toolbar, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
startActivityWithoutExtras(SettingActivity.class);
} else if (id == R.id.action_about) {
startActivityWithoutExtras(AboutActivity.class);
}
return super.onOptionsItemSelected(item);
}
private long lastBackKeyDownTick = 0;
public static final long MAX_DOUBLE_BACK_DURATION = 1500;
@Override
public void onBackPressed() {
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {//当前抽屉是打开的,则关闭
mDrawerLayout.closeDrawer(Gravity.LEFT);
return;
}
if (mCurrentFragment instanceof WebViewFragment) {//如果当前的Fragment是WebViewFragment 则监听返回事件
WebViewFragment webViewFragment = (WebViewFragment) mCurrentFragment;
if (webViewFragment.canGoBack()) {
webViewFragment.goBack();
return;
}
}
long currentTick = System.currentTimeMillis();
if (currentTick - lastBackKeyDownTick > MAX_DOUBLE_BACK_DURATION) {
SnackBarUtils.makeShort(mDrawerLayout, "再按一次退出").success();
lastBackKeyDownTick = currentTick;
} else {
finish();
System.exit(0);
}
}
}