Запуск мероприятий из представления - PullRequest
1 голос
/ 04 октября 2011

Мне было интересно, как лучше подходить к запуску действий из других представлений по модульному принципу. Я пытаюсь найти способ сообщить моей «кнопке», какое действие нужно отключить, если оно было выбрано в «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, которые я должен использовать, или мне нужно создавать свои собственные функции обратного вызова и настраивать свою собственную систему.

Любая информация о том, что я делаю неправильно, или о том, что я могу сделать иначе, чтобы подходить к этому по-другому / лучше, будет принята с благодарностью. Спасибо.

1 Ответ

1 голос
/ 04 октября 2011

ИМХО, просто Button поддерживает отправку событий щелчка на OnClickListener, ваш пользовательский View должен иметь собственный пользовательский интерфейс событий для отправки своих собственных пользовательских событий на контроллер (например, действие).Контроллер должен сделать что-то с этими событиями, например запустить другие действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...