2017-03-02 221 views
0

我爲我的應用程序創建了自定義導航抽屜。行爲是完美的,除了當我點擊一個項目時它立即關閉,沒有動畫。但開啓和關閉而選擇工作完美導航抽屜關閉不動畫

public class MainMenuActivity extends ActivityBase implements NavigationInteractions { 

private Toolbar mToolbar; 
private TextView mToolbarTitle; 
private ImageView mToolbarIcon; 

private DrawerLayout drawer; 
private ActionBarDrawerToggle drawerToggle; 
private CustomDrawerAdapter drawerAdapter; 
private List<DrawerItem> drawerItemList; 
private ListView drawerListView; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_menu); 

    // Handle toolbar 
    mToolbar = (Toolbar) findViewById(R.id.toolbar); 
    mToolbarTitle = (TextView) mToolbar.findViewById(R.id.toolbar_title); 
    mToolbarIcon = (ImageView) findViewById(R.id.toolbar_icon); 
    setSupportActionBar(mToolbar); 

    initNavigationDrawer(); 
    // load default fragment 
    if (savedInstanceState == null) { 
     onFragmentInteraction(NI_GOTO_SEARCH, null); 
    } 
} 

private void initNavigationDrawer() { 

    User currentUser = AccountManager.current(this);; 

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawerListView = (ListView) findViewById(R.id.left_drawer); 
    drawerListView.setOnItemClickListener(new DrawerItemClickListener()); 

    drawerItemList = new ArrayList<>(); 
    drawerItemList.add(new DrawerItem(DrawerItem.NAV_ITEM_TYPE_USER, currentUser.getName(), currentUser.getEmail())); 
    drawerItemList.add(new DrawerItem(DrawerItem.NAV_ITEM_TYPE_BLACK_NO_ICON, "Order History")); 
    drawerItemList.add(new DrawerItem(DrawerItem.NAV_ITEM_TYPE_BLACK_NO_ICON, "Log Out")); 
    drawerItemList.add(new DrawerItem(DrawerItem.NAV_ITEM_TYPE_WHITE_NO_ICON, "FAQ")); 
    drawerItemList.add(new DrawerItem(DrawerItem.NAV_ITEM_TYPE_WHITE_NO_ICON, "About")); 
    drawerItemList.add(new DrawerItem(DrawerItem.NAV_ITEM_TYPE_WHITE_NO_ICON, "Terms & Conditions")); 
    drawerItemList.add(new DrawerItem(DrawerItem.NAV_ITEM_TYPE_WHITE_NO_ICON, "Privacy Policy")); 
    drawerItemList.add(new DrawerItem(DrawerItem.NAV_ITEM_TYPE_WHITE_NO_ICON, "Contact Us")); 

    CustomDrawerAdapter adapter = new CustomDrawerAdapter(this, R.layout.drawer_item_white_with_icon, drawerItemList); 

    drawerListView.setAdapter(adapter); 

    drawerToggle = new ActionBarDrawerToggle(
      this, drawer, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(drawerToggle); 
    drawerToggle.syncState(); 

} 

@Override 
public void onBackPressed() { 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if (drawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 

    return false; 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    drawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Pass any configuration change to the drawer toggles 
    drawerToggle.onConfigurationChanged(newConfig); 
} 

private void SelectDrawerItem(final int position) { 

    switch (position) { 
     case 0: 
      onFragmentInteraction(NI_DRAWER_GOTO_USER, null); 
      break; 
     case 1: 
      onFragmentInteraction(NI_DRAWER_GOTO_HISTORY, null); 
      break; 
     case 2: 
      onFragmentInteraction(NI_DRAWER_GOTO_LOGOUT, null); 
      break; 
    } 

    drawerListView.setItemChecked(position, true); 
    drawer.closeDrawer(drawerListView, false); 

} 

@Override 
public void onFragmentInteraction(int interaction, Parcelable object) { 

    switch (interaction) { 

     case NI_GOTO_SEARCH: 

      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.fragment_container, 
          SearchFragment.newInstance(), 
          SearchFragment.TAG) 
        .commitAllowingStateLoss(); 
      break; 

     case NI_DRAWER_GOTO_USER: 

      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.fragment_container, 
          ProfileFragment.newInstance(), 
          ProfileFragment.TAG) 
        .commitAllowingStateLoss(); 
      break; 

     case NI_DRAWER_GOTO_HISTORY: 

      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.fragment_container, 
          HistoryFragment.newInstance(), 
          HistoryFragment.TAG) 
        .commitAllowingStateLoss(); 
      break; 

     case NI_DRAWER_GOTO_LOGOUT: 

      AccountManager.logOut(this); 

      startActivity(new Intent(this, OpeningActivity.class)); 
      finish(); 
      break; 

     case NI_DRAWER_GOTO_FAQ: 

      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.fragment_container, 
          ProductFragment.newInstance(), 
          ProductFragment.TAG) 
        .commitAllowingStateLoss(); 
      break; 

     case NI_DRAWER_GOTO_ABOUT: 

      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.fragment_container, 
          ProductFragment.newInstance(), 
          ProductFragment.TAG) 
        .commitAllowingStateLoss(); 
      break; 

     case NI_DRAWER_GOTO_TERMS: 

      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.fragment_container, 
          ProductFragment.newInstance(), 
          ProductFragment.TAG) 
        .commitAllowingStateLoss(); 
      break; 

     case NI_DRAWER_GOTO_PRIVACY: 

      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.fragment_container, 
          ProductFragment.newInstance(), 
          ProductFragment.TAG) 
        .commitAllowingStateLoss(); 
      break; 

     case NI_DRAWER_GOTO_CONTACT: 

      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.fragment_container, 
          ProductFragment.newInstance(), 
          ProductFragment.TAG) 
        .commitAllowingStateLoss(); 
      break; 
     default: 
      Toast.makeText(this, "No valid option", Toast.LENGTH_SHORT).show(); 
    } 

} 

@Override 
public void changeActionBarTitle(String title) { 

    getSupportActionBar().show(); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    mToolbarTitle.setText(title); 
    mToolbarTitle.setVisibility(View.VISIBLE); 
    mToolbarIcon.setVisibility(View.GONE); 
} 

@Override 
public void hideActionBar() { 
    getSupportActionBar().hide(); 
} 

@Override 
public void showActionBarAppIcon() { 
    getSupportActionBar().show(); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    mToolbarTitle.setVisibility(View.GONE); 
    mToolbarIcon.setVisibility(View.VISIBLE); 
} 

private class DrawerItemClickListener implements 
     ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     SelectDrawerItem(position); 
    } 
} 

}

+0

您如何在選擇時關閉抽屜? –

+0

代碼。我們需要一些代碼 – DEADMC

回答

0

你有,因爲這條線的這個問題:

drawer.closeDrawer(drawerListView, false); 

改變這樣的:

drawer.closeDrawer(drawerListView, true); 

布爾是爲動畫。

希望這會有所幫助。

+0

對不起,我改變了動畫的布爾實驗,但實際上它也發生在真實的情況下。沒有不同。 –

0

引起凍結的實際行是: drawerListView.setItemChecked(position,true);

我剛纔在搜索說明時對它進行了評論