Мне было интересно, как лучше подходить к запуску действий из других представлений по модульному принципу. Я пытаюсь найти способ сообщить моей «кнопке», какое действие нужно отключить, если оно было выбрано в «onTouchEvent». В настоящее время у меня есть основной вид деятельности, который создает и настраивает мой взгляд на MainMenu. Мое главное меню определяет класс MenuItem, который определяет прямоугольник для рисования кнопки и запуска активности при пересечении / касании / щелчке. Тем не менее, я испытываю некоторые трудности с активацией. Ниже приведены лишь несколько фрагментов кода, демонстрирующих то, чего я пытаюсь достичь:
public class MainMenu extends View {
...
private Vector<MenuItem> menuItems;
private MenuItem testButton;
private MenuItem testButton2;
public MainMenu(Context context) {
...
// Create our menu buttons and load their specific images
testButton = new MenuItem(context, new OptionsMenu(), 150, 50, imgButtons, 256, 64, 0, 0);
testButton2 = new MenuItem(context, OptionsMenu.class, 150, 200, imgButtons, 256, 64, 0, 0);
// Store our buttons
menuItems = new Vector<MenuItem>(5, 2);
menuItems.add(testButton);
menuItems.add(testButton2);
}
...
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() != MotionEvent.ACTION_DOWN)
super.onTouchEvent(event);
// Create our menu item iterator
Iterator<MenuItem> menuItemsIter = menuItems.iterator();
Object element;
// Loop through our menu items, drawing them
while(menuItemsIter.hasNext()) {
element = menuItemsIter.next();
if(((MenuItem)element).HasIntersected((int)event.getX(), (int)event.getY())) {
((MenuItem)element).LaunchActivity();
}
}
return true;
}
}
class MenuItem {
...
private Context container = null; // Indicates which activity contains us
private Object startObject = null; // Which activity we'll start/execute
public MenuItem(Context context, Object object, int xPos, int yPos, Bitmap image,
int imageWidth, int imageHeight, int xOffset, int yOffset) {
...
container = context;
startObject = object;
}
...
public void LaunchActivity() {
if(startObject != null) {
Intent activity = new Intent(container, startObject.getClass());
container.startActivity(activity);
}
}
}
Я попытался установить объект моего MenuItem двумя различными способами (новые OptionsMenu () и OptionsMenu.class), но ни один из них не работает. Я попытался уклониться от использования startObject объекта MenuItem при создании нового Intent и вместо этого использовать (container, optionsMenu.class) для параметров. Что тоже не сработало. Из того, что я знаю, это правильный способ запустить упражнение, но я предполагаю, что где-то пропускаю шаг.
Кроме того, я прочитал несколько статей / сообщений людей, в которых упоминается использование обратных вызовов, но на стороне «Активность» вместо «Вид». Тем не менее, было не очень ясно, были ли встроенные функции обратного вызова Android, которые я должен использовать, или мне нужно создавать свои собственные функции обратного вызова и настраивать свою собственную систему.
Любая информация о том, что я делаю неправильно, или о том, что я могу сделать иначе, чтобы подходить к этому по-другому / лучше, будет принята с благодарностью. Спасибо.