我是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();
}
我非常感谢你的任何建议。
答案 0 :(得分:6)
您可以使用Handler将Runnable发布到消息队列中来模拟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);
}
}
答案 1 :(得分:1)
这里有2个问题。
如何绑定控件。我用 到处都是匿名内部班级。输入有点冗长,但自动完成功能使其变得简单。
如何使UI响应。 关键是不要做任何时间 消费在UI线程中。如果它 花费超过0.1秒,完成工作 工作线程并通知UI 任务完成时更新。该 另一件事是确保你 不要产生大量垃圾 因为Android GC现在非常原始。
答案 2 :(得分:1)
对于Button
我通常会延长Button
类并覆盖onTouchEvent()
public boolean onTouchEvent (MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
setPressed(true);
}
return super.onTouchEvent(event);
}