2017-03-08 51 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); }' –

相關問題