2013-04-25 2 views
1

Я новичок в android и не знаю, где я должен писать код actionlistner для кнопок панели действий, так что мне не нужно писать код действия в любой активности.как бороться с клавишами кнопок панели действий

Пожалуйста, посмотрите ниже изображение: у меня есть файл menu.xml для меню панели действий и добавлен в один из моих действий через функцию onCreateOptionMenu. когда пользователь нажимает на любую из моих кнопок панели действий, я могу отслеживать ее через функцию onOptionItemSelected.

Проблема-1: Для всех других видов деятельности я могу использовать тот же файл menu.xml, но мне нужно переопределить функцию onCreateOptionMenu для каждого вида деятельности.

Проблема 2: Мне нужно написать onOptionItemВыбранный код функции во всех действиях?

Пожалуйста, предложите мне лучшее решение этих проблем.

enter image description here

ответ

0

проблемно-1: Для всех других деятельности, я могу использовать тот же файл menu.xml, но мне нужно, чтобы переопределить onCreateOptionMenu функции каждого вида деятельности.

Да, просто добавьте свой код, чтобы обрабатывать параметры меню в инструкции switch.

Задача 2: Мне нужно написать onOptionItemВыбранный код функции во всех действиях?

Да, для каждого действия, использующего панель действий, вам необходимо переопределить функцию onOptionItemSelected и добавить свой код.

Например:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.menu_watchlist: 
      Intent intent = new Intent(HomeActivity.this, WatchlistActivity.class); 
      intent.putExtra("username", currentUser.getUsername()); 
      startActivityForResult(intent, 0); 
      return true; 
     case R.id.menu_history: 
      Intent intent2 = new Intent(HomeActivity.this, HistoryActivity.class); 
      intent2.putExtra("username", currentUser.getUsername()); 
      startActivityForResult(intent2, 0); 
      return true; 
     case R.id.menu_scores: 
      // Scores only available with Facebook login 
      if (facebookLogin) 
      { 
       Intent scoreIntent = new Intent(HomeActivity.this, ScoresActivity.class); 
       scoreIntent.putExtra("username", currentUser.getUsername()); 
       scoreIntent.putExtra("accessToken", accessToken); 
       Session session = Session.getActiveSession(); 
       scoreIntent.putExtra("session", session); 
       startActivityForResult(scoreIntent, 0); 
      } 
      else 
       Toast.makeText(getApplicationContext(), "Please login to Facebook to use this feature.", Toast.LENGTH_SHORT).show(); 
      return true; 
     case R.id.menu_settings: 
      Intent intent3 = new Intent(HomeActivity.this, SettingsActivity.class); 
      intent3.putExtra("username", currentUser.getUsername()); 
      startActivityForResult(intent3, 0); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
+0

Но в моем проекте у меня более 20 видов деятельности, и все они используют одну и ту же панель действий, поэтому это будет потеря времени для повторения одного и того же кода. Пожалуйста, предложите мне другой способ. Если возможно ... – Aditya

+0

Я бы скопировал и вставлял ... потребовалось бы всего минуту или две, чтобы добавить к 20 мероприятиям (что похоже на A LOT для приложения).Вы можете поместить оператор switch в отдельный класс, но вам все равно нужно переопределить onOptionItemSelected, чтобы предоставить функциональность панели действий. – mjhouseman

+0

Но после вставки этого кода на все места, если я хочу изменить маленькую вещь в моем коде, тогда снова мне нужно изменить во всех местах! – Aditya

1

проблемно-1: Для всех других деятельности, я могу использовать тот же файл menu.xml, но мне нужно, чтобы переопределить onCreateOptionMenu функции каждого вида деятельности.

Проблема 2: Мне нужно написать onOptionItemВыбранный код функции во всех действиях?

Вы можете создать «базу» Activity и реализовать методы в этом. Тогда все, что вам нужно сделать, это убедиться, что все остальные Activities удлиняют «базу» Activity.

Пример (заметьте, я использую ActionBarSherlock так что моя «база» Activity изначально распространяется ShelockFragmentActivity - что не может быть такой же, в вашем случае, но это дает пример) ...

public class MyBaseFragmentActivity extends SherlockFragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.my_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     super.onOptionsItemSelected(item); 

     // Handle menu selection here 
    } 
} 

Теперь любой Activity, который проходит что «base» Activity автоматически наследует методы создания меню и выбора предметов класса «base».

public class ActivityA extends MyBaseFragmentActivity { 

    // No need to create the menu or handle item selection 

} 
+1

Думаю, это хорошее решение. Я попытаюсь интегрировать его. Спасибо за предоставление решения. – Aditya

Смежные вопросы