2

我对 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()绑定到 a (按下Buttona 时执行)并发布消息。当接收到消息时,执行该方法。ButtonWM_RECORD_STARTWM_RECORD_STARTOnRecordStart()

如前所述,我想创建一个响应式用户界面,但不确定如果OnRecordStart()直接从以下位置调用该方法是否足够好RecordStart()

void RecordStart()
{
    OnRecordStart();
}

我真的很感激你的任何建议。

4

3 回答 3

6

您可以通过使用HandlerRunnable发布到消息队列中来模拟 Android 中的 MFC 样式行为。

这是一个简单的例子

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);
    }
}
于 2009-06-16T17:48:33.800 回答
1

您在这里有 2 个问题。

  1. 如何绑定控件。我到处使用匿名内部类。输入有点冗长,但自动完成让它变得轻而易举。

  2. 如何使 UI 响应。关键是不要在 UI 线程中做任何耗时的事情。如果花费的时间超过 0.1 秒,请在工作线程中完成工作,并在任务完成时通知 UI 进行更新。另一件事是确保您不会产生大量垃圾,因为 android GC 现在非常原始。

于 2009-06-16T18:45:20.293 回答
1

对于Buttons 我通常扩展Button类并覆盖onTouchEvent()

public boolean onTouchEvent (MotionEvent event) 
{
   if (event.getAction() == MotionEvent.ACTION_DOWN) 
   {
      setPressed(true);
   }
   return super.onTouchEvent(event);
}
于 2011-11-09T14:42:53.973 回答