2017-03-08 46 views
0

我需要修复多选项目物品。当我选择其中一个项目时,它会改变它的颜色。但是当我再次打开左侧抽屉时,它仍然处于选中状态。我需要在2种情况下丢弃任何选定的项目:1)当我按另一个项目时,必须取消选择的项目。 2)当左抽屉关闭时,选择必须丢弃。 enter image description here左抽屉固定物品多选

[Activity(Theme = "@style/GsiTheme", MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait)] 
public class MainPageActivity : AppCompatActivity, IActivityWithToolbar 
{ 

    #region Views 
    [InjectView(Resource.Id.mainpageToolbar)] 
    SupportToolbar _toolbar; 

    [InjectView(Resource.Id.navigation_view)] 
    NavigationView _navigationView; 

    [InjectView(Resource.Id.drawer)] 
    DrawerLayout _drawer; 

    #endregion 

    ActionBarDrawerToggle _drawerToggle; 

    public SupportToolbar Toolbar 
    { 
     get 
     { 
      return _toolbar; 
     } 
    } 

    Dictionary<int, Type> _fragmentTypesById = new Dictionary<int, Type>() { 
     {Resource.Id.categoriesMenuItem,typeof(CategoriesListFragment)}, 
     {Resource.Id.opportunitiesMenuItem,typeof(OpportunitiesListFragment)}, 
     {Resource.Id.prospectsMenuItem,typeof(ProspectsListFragment)}, 
     {Resource.Id.suppliersMenuItem,typeof(SuppliersListFragment)}, 
     {Resource.Id.accountsMenuItem,typeof(AccountsListFragment)}, 
     {Resource.Id.fabricantsMenuItem,typeof(ManufacturersListfragment)}, 
     {Resource.Id.contactsMenuItem,typeof(ContactsListFragment)}, 
     {Resource.Id.productsMenuItem,typeof(ProductsListFragment)}, 
     {Resource.Id.warehouseMenuItem,typeof(WarehouseListFragment)}, 
     {Resource.Id.stockMenuItem,typeof(StocksListFragment)} 

    }; 

    int _selectedPageMenuId; 


    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     try 
     { 
      base.OnCreate(savedInstanceState); 

      SetContentView(Resource.Layout.mainPagelayout); 

      Cheeseknife.Inject(this); 
      initUi(); 
      //var ft = this.SupportFragmentManager.BeginTransaction(); 
      //ft.Add(Resource.Id.mainPageFragmentHolder, new CategoriesListFragment()); 
      //ft.Commit(); 
     } 
     catch (Exception ex) 
     { 
      Toast.MakeText(this, ex.Message, ToastLength.Long).Show(); 

     } 

    } 

    private void initFragmentByMenuId(int menuId) 
    { 

     if (_selectedPageMenuId == menuId) 
      return; 


     if (!_fragmentTypesById.ContainsKey(menuId)) 
      return; 

     var currFragment = Activator.CreateInstance(_fragmentTypesById[menuId]) as Android.Support.V4.App.Fragment; 

     Android.Support.V4.App.FragmentTransaction ft = SupportFragmentManager.BeginTransaction(); 
     ft.Replace(Resource.Id.mainPageFragmentHolder, currFragment, currFragment.GetType().Name); 
     ft.Commit(); 

     _selectedPageMenuId = menuId; 

    } 

    void navigationItem_selected(object sender, NavigationView.NavigationItemSelectedEventArgs e) 
    { 
     _navigationView.Menu.FindItem(e.MenuItem.ItemId).SetChecked(true); 

     initFragmentByMenuId(e.MenuItem.ItemId); 

     _drawer.CloseDrawers(); 

    } 

    void subscribeEvents() 
    { 

     _navigationView.NavigationItemSelected += navigationItem_selected; 
    } 

    void unSubscribeEvents() 
    { 
     _navigationView.NavigationItemSelected -= navigationItem_selected; 
    } 

    void initUi() 
    { 

     SetSupportActionBar(_toolbar); 
     SupportActionBar.Title = "Dashboard"; 
     _drawerToggle = new CustActionBarDrawToggle(this, _drawer, 0, 0); 

     _drawer.AddDrawerListener(_drawerToggle); 
     _drawerToggle.SyncState(); 

     SupportActionBar.SetHomeButtonEnabled(true); 
     SupportActionBar.SetDisplayShowHomeEnabled(true); 
     SupportActionBar.SetDisplayHomeAsUpEnabled(true); 
    } 

    public override bool OnOptionsItemSelected(IMenuItem item) 
    { 
     _drawerToggle.OnOptionsItemSelected(item); 
     return base.OnOptionsItemSelected(item); 
    } 

    protected override void OnStart() 
    { 
     try 
     { 
      base.OnStart(); 
      subscribeEvents(); 
     } 
     catch (Exception ex) 
     { 
      Toast.MakeText(this, ex.Message, ToastLength.Long).Show(); 
     } 
    } 

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
    { 
     try 
     { 
      base.OnActivityResult(requestCode, resultCode, data); 
      AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs(requestCode, resultCode, data); 
     } 
     catch (Exception ex) 
     { 
      Toast.MakeText(this, ex.Message, ToastLength.Long).Show(); 
     } 
    } 

    protected override void OnStop() 
    { 
     try 
     { 
      base.OnStop(); 
      unSubscribeEvents(); 
     } 
     catch (Exception ex) 
     { 
      Toast.MakeText(this, ex.Message, ToastLength.Long).Show(); 
     } 
    } 
} 

}

回答

0

我认为,你可以很容易地达到你想要什么,通过始终保存最后选择的项目,并确保它是选择新的人之前未被选择。

MenuItem lastSelected; 

void navigationItem_selected(object sender, NavigationView.NavigationItemSelectedEventArgs e) 
{ 
    // If another item is already selected 
    if(lastSelected != null) { 
     lastSelected.SetChecked(false); 
    } 

    // Save the handle to the new item and select it 
    lastSelected = _navigationView.Menu.FindItem(e.MenuItem.ItemId); 
    lastSelected.SetChecked(true); 

    initFragmentByMenuId(e.MenuItem.ItemId); 

    _drawer.CloseDrawers(); 
} 

另外,你可以只订阅DrawerClosed事件,并在那里做同样lastSelected.SetChecked(false)。仅在抽屉完全关闭时才调用DrawerClosed

+0

但我怎么能在另一个Toggle-class中管理lastSelected?我有一个类'CustActionBarDrawToggle:ActionBarDrawerToggle'和一个方法:'公共覆盖无效OnDrawerClosed(查看抽屉视图) \t { base.OnDrawerClosed(drawerView); }' –

相关问题