2

Я делаю свое первое приложение для Android, но у меня возникла проблема. У меня есть более 8 различных классов, которые используют один и тот же файл. Теперь вместо вызова метода в каждом классе (и имея много двойного кода) я хотел бы назвать метод основного класса в других моих классах.Как позвонить (и использовать) onOptionsItemВыбрать из MainActivity в других классах

Это часть моего кода для onOptionsItemSelected в Main.java

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle presses on the action bar items 
     switch (item.getItemId()) { 
     case R.id.actionbar_new_income: 
      Intent newIncome = new Intent(this, NewIncome.class); 
      this.startActivity(newIncome); 
      return true; 
} 
} 

Теперь мне было интересно, как я мог бы вызвать метод в другом классе (newIncome.java) у меня это до сих пор, но он продолжает говорить, что мне нужно добавить аргументы. И я, конечно, должен уметь обнаруживать, какое из пунктов меню щелкнуть.

MainActivity main = new MainActivity(); 
     main.onOptionsItemSelected(); 

Любая помощь пожалуйста? Спасибо!

ответ

3

Вы не должны этого делать. Если у вас есть общий код, тогда поместите его в класс (а не на активность), доступный для любой активности, которая ему нужна.

У вас все еще будет некоторое дублирование, но это нормально.

Хороший способ сокращения кода запуска активность добавить статический метод на каждый вид деятельности, который можно назвать, который запускает свою деятельность он находится.

Например, в вашей NewIncome деятельности вы могли бы

Public static void Launch(Context c) { 
    Intent newIncome = new Intent(c, NewIncome.class); 
    C.startActivity(newIncome); 
} 

вы могли бы начать эту деятельность с какой-либо другой деятельности, просто позвонив по телефону

NewIncome.Launch(this); 

При необходимости вы можете добавить параметры т o метод, а затем добавьте Extras в Activity с использованием этих параметров.

+0

Я не очень хорошо формулировал свой вопрос, поэтому немного отредактировал его. Я говорил о классах, у меня есть 8 классов, где мне придется делать то же самое восемь раз. Будет ли способ сделать суперметод onOptionsItemSelected (меню MenuItem), который я мог бы использовать в каждом классе? Или ваш путь наилучшим образом? – Yenthe

+0

Если все ваши параметры меню только запускают другие действия, вы можете обратиться к общему классу, чтобы обработать это, но если какая-либо из ваших записей в меню делает что-либо, что является специфическим для активности, оно должно обрабатываться этой деятельностью. – Kuffs

+0

Они на самом деле только начинают другие действия, ничего больше. Но мне нужно было бы обнаружить, какой элемент меню щелкнут в каждом отдельном действии и связать его с правильным другим действием. Что было бы лучшим способом сделать это?(обратите внимание, что у меня уже есть расширение для чего-то во всех моих других классах, поэтому я не могу продлить) – Yenthe

1

Вы можете сделать это, как в следующем примере, если ваши пункты меню могут быть полностью независимы от деятельности, в которой они содержатся:

В каждой деятельности

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return CommonClass.HandleMenu(this, item.getItemId()); 
} 

В общем классе

public class CommonClass { 

    public boolean HandleMenu (Context c, int MenuEntry) { 
     switch (MenuEntry) { 
      case R.id.actionbar_new_income: 
      NewIncome.Launch(c); 
      etc.... 
      ... 
    } 


} 
0

Если ваши 8 классов являются действиями, вы можете определить базовый актив с помощью onOptionsItemSelected, который является тем местом, где вы помещаете элементы в actio nbar вы хотите. Затем сделайте из него другие действия.

+0

Я уже продлеваю свои действия, поэтому я не смогу это сделать? : s – Yenthe

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