Android: лучшая практика для отзывчивых пользовательских интерфейсов - PullRequest
2 голосов
/ 16 июня 2009

Я новичок в Android и Java. Раньше я работал с C ++, где события отправлялись с сообщениями. Теперь я хотел бы создать такой же пользовательский интерфейс для платформы Android и буду признателен за любые ваши предложения или комментарии о том, как лучше всего связать события с пользовательскими элементами управления.

Вот пример из C ++:

ON_MESSAGE(WM_RECORD_START, &CMainFrame::OnRecordStart)//Method OnRecordStarts() executes on WM_RECORD_START_MESSAGE

...

LRESULT CMainFrame::OnRecordStart(WPARAM wParam, LPARAM lParam)
{

        m_pNetworkCtrl->SetGeoLocationInfo();
        ...
}

...

void CMainFrame::RecordStart()
{
    PostMessage(WM_RECORD_START);
}

В приведенном выше случае метод RecordStart() привязан к Button (он выполняется при нажатии Button) и отправляет сообщение WM_RECORD_START. При получении сообщения WM_RECORD_START выполняется метод OnRecordStart().

Как уже упоминалось ранее, я хотел бы создать адаптивный пользовательский интерфейс и не уверен, что будет достаточно хорошо, если метод OnRecordStart() вызывается непосредственно из RecordStart():

void RecordStart()
{
    OnRecordStart();
}

Буду очень признателен за любые ваши предложения.

Ответы [ 3 ]

6 голосов
/ 16 июня 2009

Вы можете эмулировать поведение стиля MFC в Android, используя Обработчик для отправки Runnable в очередь сообщений.

Вот краткий пример

class MyClass
{
    Handler m_myHandler;
    Runnable m_myRunnable;

    MyClass()
    {
        m_myHandler = new Handler();
        m_myRunnable = new RUnnable()
        {
            public void run()
            {
                // do your stuff here
            }
        };
    }

    public void onclickListener(...)
    {
        // push the runnable into the message queue
        m_myHandler.post(m_myRUnnable);
    }
}
1 голос
/ 09 ноября 2011

Для Button с я обычно расширяю Button класс и переопределяю onTouchEvent()

public boolean onTouchEvent (MotionEvent event) 
{
   if (event.getAction() == MotionEvent.ACTION_DOWN) 
   {
      setPressed(true);
   }
   return super.onTouchEvent(event);
}
1 голос
/ 16 июня 2009

У вас есть 2 вопроса здесь.

  1. Как связать элементы управления. я использую анонимные внутренние классы везде. Это немного многословно для ввода, но автоматическое завершение делает это несложно.

  2. как сделать интерфейс отзывчивым. Ключ не делать ничего раз потребляя в потоке пользовательского интерфейса. Если оно занимает больше, чем .1с, делать работу в рабочий поток и уведомить пользовательский интерфейс обновить, когда задача выполнена. Другое дело, чтобы убедиться, что вы не генерировать много мусора поскольку андроид GC сейчас довольно примитивен.

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