package com.hyman.treemenudemo; import android.content.Context; import android.graphics.drawable.Drawable; 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.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; import android.widget.Toast; import com.hyman.treemenu.DrawerMenuLayout; import com.hyman.treemenu.MenuView; import com.hyman.treemenu.pojo.TopMenu; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity implements DrawerMenuLayout.OnMenuClickListener{ private static final int MENU_TREEMENU_IN_SCROLLVIEW = 1; private static final int MENU_INIT_SELECTED_MENU = 2; private static final int MENU_ABOUT_ME = 3; private DrawerLayout drawerLayout; private ActionBarDrawerToggle actionBarDrawerToggle; private DrawerMenuLayout drawerMenuLayout; private Context context; private FragmentManager mFragmentManager; private FrameLayout container; private Fragment lastFragment; private Map<String, Fragment> fragmentMap = new HashMap<>(); private TextView demoNemeTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.context = MainActivity.this; Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close); actionBarDrawerToggle.syncState(); drawerLayout.setDrawerListener(actionBarDrawerToggle); drawerMenuLayout = (DrawerMenuLayout) findViewById(R.id.drawerMenuLayout); initMenuLayout(); // get container container = (FrameLayout) findViewById(R.id.container); demoNemeTextView = (TextView)findViewById(R.id.demoNemeTextView); initFragments(); } private void initFragments() { fragmentMap.put(MenuInScrollViewFragment.class.getSimpleName(), MenuInScrollViewFragment.newInstance()); fragmentMap.put(InitSelectedMenuFragment.class.getSimpleName(), InitSelectedMenuFragment.newInstance()); fragmentMap.put(AboutMeFragment.class.getSimpleName(), AboutMeFragment.newInstance()); mFragmentManager = getSupportFragmentManager(); FragmentTransaction mTransaction = mFragmentManager.beginTransaction(); for (Fragment fragment : fragmentMap.values()) { mTransaction.add(R.id.container, fragment); mTransaction.hide(fragment); } mTransaction.commit(); } private void initMenuLayout() { Drawable item1Icon = getResources().getDrawable(R.drawable.item1); Drawable profileIcon = getResources().getDrawable(R.drawable.profile); Drawable item2Icon = getResources().getDrawable(R.drawable.item2); List<TopMenu> topMenuList = new LinkedList<>(); TopMenu topMenu = new TopMenu("TreeMenu in ScrollView", item1Icon, null); topMenu.setTag(MENU_TREEMENU_IN_SCROLLVIEW); topMenuList.add(topMenu); TopMenu topMenu2 = new TopMenu("Init Selected Menu", item2Icon, null); topMenu2.setTag(MENU_INIT_SELECTED_MENU); topMenuList.add(topMenu2); TopMenu topMenu3 = new TopMenu("About Me", profileIcon, null); topMenu3.setTag(MENU_ABOUT_ME); topMenuList.add(topMenu3); /*List<SecMenu> secMenuList = new LinkedList<>(); SecMenu secMenu1 = new SecMenu("Sec Title1"); secMenu1.setTag(MENU_SECOND); secMenuList.add(secMenu1); *//*List<BaseMenu> baseMenuList = new LinkedList<>(); BaseMenu baseMenu1 = new BaseMenu("Base Title1"); baseMenu1.setTag(MENU_THIRD); BaseMenu baseMenu2 = new BaseMenu("Base Title2"); baseMenu2.setTag(MENU_FORTH); baseMenuList.add(baseMenu1); baseMenuList.add(baseMenu2); SecMenu secMenu2 = new SecMenu("Sec Title2", baseMenuList); secMenuList.add(secMenu2);*//* SecMenu secMenu3 = new SecMenu("Sec Title3"); secMenu3.setTag(MENU_FIVE); secMenuList.add(secMenu3); TopMenu topMenu1 = new TopMenu("Top Title2", configIcon, null, secMenuList); topMenuList.add(topMenu1);*/ drawerMenuLayout.createMenus(topMenuList); drawerMenuLayout.setOnMenuClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } else if (id == android.R.id.home) { drawerLayout.openDrawer(GravityCompat.START); actionBarDrawerToggle.syncState(); } return super.onOptionsItemSelected(item); } @Override public void onMenuClick(MenuView menu) { int tag = (int)menu.getTag(); showToast("menu \"" + menu.getTitle() + "\" touched"); demoNemeTextView.setVisibility(View.GONE); switch (tag) { case MENU_TREEMENU_IN_SCROLLVIEW: // show fragment Fragment fragment = fragmentMap.get(MenuInScrollViewFragment.class.getSimpleName()); showFragment(fragment); break; case MENU_INIT_SELECTED_MENU: showFragment(fragmentMap.get(InitSelectedMenuFragment.class.getSimpleName())); break; case MENU_ABOUT_ME: showFragment(fragmentMap.get(AboutMeFragment.class.getSimpleName())); break; } drawerLayout.closeDrawer(GravityCompat.START); } private void showFragment(Fragment fragment) { if (lastFragment == null || lastFragment != fragment) { FragmentTransaction _transaction = mFragmentManager.beginTransaction(); if (lastFragment != null) { _transaction.hide(lastFragment); } _transaction.show(fragment).commit(); lastFragment = fragment; } } private void showToast(String msg) { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } }