2013-09-01 26 views
7

Chcę użyć pokrętła w pasku akcji w mojej aktywności poniżej jest onCreateOptionsMenu: Używam this tutorial, aby osiągnąć to podejście. Mój problem polega na tym, że działanie to lunch, uruchamiana jest metoda onNavigationItemSelected i uruchamiany jest kod na przełączniku/przypadku, a działanie ustawione dla pozycji 0 otwiera się. co powinienem zrobić, aby zapobiec uruchomieniu przełącznika/przypadku, gdy aktywność jest obiadem?Jak zapobiegać pożarom Wywoływanym przez elementItemSelected po uruchomieniu działania?

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getSupportMenuInflater().inflate(R.menu.main, menu); 

    SpinnerAdapter mSpinnerAdapter; 
    if(Build.VERSION.SDK_INT <= 10) 
    { 
     mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.spinner_data,android.R.layout.simple_spinner_item); 
    } 
    else 
    { 
     mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.spinner_data,android.R.layout.simple_spinner_dropdown_item); 
    } 
    ActionBar.OnNavigationListener mOnNavigationListener = new ActionBar.OnNavigationListener() 
    { 
     @Override 
     public boolean onNavigationItemSelected(int position, long itemId) 
     { 
      switch (position) 
      { 
       case 0: 
        Intent searchIntent = new Intent(ActivitySearchBusiness.this, ActivityFindBusinessCity.class); 
        startActivity(searchIntent); 
        break; 
       case 2: 
        Intent dealsIntent = new Intent(ActivitySearchBusiness.this, ActivityDeals.class); 
        startActivity(dealsIntent); 
        break; 
       case 3: 
        Intent eventsIntent = new Intent(ActivitySearchBusiness.this, ActivityEvents.class); 
        startActivity(eventsIntent); 
        break; 
      } 

      return true; 
     } 
    }; 
    actionBar.setListNavigationCallbacks(mSpinnerAdapter, 

    return super.onCreateOptionsMenu(menu); 
} 

Odpowiedz

6

Nie trzeba następujący kod wewnątrz onCreateOptionsMenu(Menu):

.... ....

Usuń go i umieścić ją w onCreate(Bundle) metody swoją aktywność użytkownika.

Edit:

Zadeklaruj zmienną globalną boolean:

boolean initializing = true; 

Umieść następujący kod wewnątrz onCreate(Bundle):

SpinnerAdapter mSpinnerAdapter; 
if(Build.VERSION.SDK_INT <= 10) 
{ 
    mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.spinner_data,android.R.layout.simple_spinner_item); 
} 
else 
{ 
    mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.spinner_data,android.R.layout.simple_spinner_dropdown_item); 
} 
ActionBar.OnNavigationListener mOnNavigationListener = new ActionBar.OnNavigationListener() 
{ 
    @Override 
    public boolean onNavigationItemSelected(int position, long itemId) 
    { 

     if (initializing) { 
      initializing = false; 
     } else {    
      switch (position) 
      { 
       case 0: 
        Intent searchIntent = new Intent(ActivitySearchBusiness.this, ActivityFindBusinessCity.class); 
        startActivity(searchIntent); 
        break; 
       case 2: 
        Intent dealsIntent = new Intent(ActivitySearchBusiness.this, ActivityDeals.class); 
        startActivity(dealsIntent); 
        break; 
       case 3: 
        Intent eventsIntent = new Intent(ActivitySearchBusiness.this, ActivityEvents.class); 
        startActivity(eventsIntent); 
        break; 
      } 
     } 

     return true; 
    } 
}; 
//actionBar.setListNavigationCallbacks(mSpinnerAdapter, mOnNavigationListener); 
getActionBar().setListNavigationCallbacks(mSpinnerAdapter, mOnNavigationListener); 
+0

Dziękuję, ale problem nie rozwiąże. kiedy aktywność po uruchomieniu uruchamia startActivity w pierwszym przypadku. –

+0

Nie masz pojęcia? –

+0

@MisaghAghakhani Czy możesz spróbować użyć zaktualizowanego kodu powyżej. – Vikram