package io.hefuyi.zhihudaily.ui.activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.util.TypedValue;
import android.view.Menu;
import android.view.View;
import butterknife.Bind;
import butterknife.ButterKnife;
import io.hefuyi.zhihudaily.DailyApplication;
import io.hefuyi.zhihudaily.R;
import io.hefuyi.zhihudaily.injector.component.ApplicationComponent;
import io.hefuyi.zhihudaily.interfaces.NavigationDrawerCallbacks;
import io.hefuyi.zhihudaily.ui.fragment.BaseFragment;
import io.hefuyi.zhihudaily.ui.fragment.DailyStoriesFragment;
import io.hefuyi.zhihudaily.ui.fragment.NavigationFragment;
import io.hefuyi.zhihudaily.ui.fragment.ThemeStoriesFragment;
import io.hefuyi.zhihudaily.util.L;
public class NavigationDrawerActivity extends BaseAppcompatActivity implements NavigationDrawerCallbacks {
private static final String TAG = NavigationDrawerActivity.class.getSimpleName();
private static final String STATE_SELECTED_POSITION = "state_selected_positioin";
@Bind(R.id.drawer_layout)
DrawerLayout drawerLayout;
@Bind(R.id.navigation_drawer)
View navigationDrawer;
private NavigationFragment mNavigationFragment;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mTitle = "";
private int mLastPosition = 0;
/*初始化相关方法*/
@Override
protected int getContentViewLayoutId() {
return R.layout.activity_navigation_drawer;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
L.i(TAG, "onCreate " + this);
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
setUpDrawer();
if (savedInstanceState == null) {
mNavigationFragment.selectItem(NavigationFragment.getDefaultNavDrawerItem());
} else {
int position = savedInstanceState.getInt(STATE_SELECTED_POSITION);
mLastPosition = position;
mTitle = mNavigationFragment.getTitle(position);
restortActionBar();
mNavigationFragment.selectItem(position);
}
}
private void setUpDrawer() {
mNavigationFragment = (NavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, mToolbar,
R.string.navigation_drawer_open, R.string.navigation_drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
supportInvalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
supportInvalidateOptionsMenu();
}
};
drawerLayout.post(new Runnable() {
@Override
public void run() {
mDrawerToggle.syncState();
}
});
drawerLayout.addDrawerListener(mDrawerToggle);
}
private void restortActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle(mTitle);
}
/*初始化相关方法*/
/*事件响应方法*/
@Override
public void onNavigationDrawerItemSelected(int position) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment lastFragment = fragmentManager.findFragmentByTag(getTag(mLastPosition));
if (lastFragment != null) {
fragmentTransaction.detach(lastFragment);
}
Fragment fragment = fragmentManager.findFragmentByTag(getTag(position));
if (fragment == null) {
fragment = getFragmentItem(position);
fragmentTransaction.add(R.id.container, fragment, getTag(position));
} else {
fragmentTransaction.attach(fragment);
}
fragmentTransaction.commit();
mLastPosition = position;
mTitle = mNavigationFragment.getTitle(position);
restortActionBar();
}
@Override
protected void refreshUI() {
mNavigationFragment.refreshUI();
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment lastFragment = fragmentManager.findFragmentByTag(getTag(mLastPosition));
if (lastFragment != null) {
((BaseFragment) lastFragment).refreshUI();
}
refreshToolBar();
}
private void refreshToolBar() {
TypedValue typedValue = new TypedValue();
Resources.Theme theme = getTheme();
theme.resolveAttribute(R.attr.colorPrimary, typedValue, true);
mToolbar.setBackgroundColor(getResources().getColor(typedValue.resourceId));
}
@Override
protected void smoothToTop() {
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment lastFragment = fragmentManager.findFragmentByTag(getTag(mLastPosition));
if (lastFragment != null) {
((BaseFragment) lastFragment).smoothToTop();
}
}
public void closeDrawer() {
drawerLayout.closeDrawer(navigationDrawer);
}
/*事件响应方法*/
/*普通逻辑方法*/
private String getTag(int position) {
switch (position) {
case 0:
return DailyStoriesFragment.TAG;
default:
return ThemeStoriesFragment.TAG + position;
}
}
private Fragment getFragmentItem(int position) {
return BaseFragment.newInstance(position, mNavigationFragment.getSectionId(position));
}
public ApplicationComponent getApplicationComponent() {
ApplicationComponent applicationComponent = ((DailyApplication) getApplication()).getApplicationComponent();
return applicationComponent;
}
public boolean isDrawerOpen() {
return drawerLayout.isDrawerOpen(navigationDrawer);
}
/*普通逻辑方法*/
/*生命周期回调方法*/
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SELECTED_POSITION, mLastPosition);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!isDrawerOpen()) {
getMenuInflater().inflate(R.menu.menu_navigationdrawer, menu);
return true;
}
return super.onCreateOptionsMenu(menu);
}
/*生命周期回调方法*/
}