2009-06-16 60 views
2

我对Android和Java颇为陌生。在我使用C++处理与消息分派的事件之前。现在我想为Android平台创建相同的用户体验,我希望您能就将事件绑定到用户控件的最佳方式提供任何建议或意见。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时执行)并发布messa ge WM_RECORD_START。当收到消息WM_RECORD_START时,方法OnRecordStart()被执行。

正如之前提到的,我想创建一个响应的用户界面,如果该方法OnRecordStart()RecordStart()直接叫我不知道是否会不够好:

void RecordStart() 
{ 
    OnRecordStart(); 
} 

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

回答

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); 
    } 
} 
1

这里有2个问题。

  1. 如何绑定控件。我在任何地方都会使用匿名内部类 。输入内容有点冗长,但自动完成功能使其变得简单。

  2. 如何使UI响应。 关键是不要在UI线程中消耗任何时间 。如果它 需要超过.1s,则在 工作线程中执行工作,并在任务完成时通知UI更新为 。 另一件事是确保你 不会产生很多垃圾 因为android GC现在是相当原始的。

1

对于Button的I通常延长Button类并覆盖onTouchEvent()

public boolean onTouchEvent (MotionEvent event) 
{ 
    if (event.getAction() == MotionEvent.ACTION_DOWN) 
    { 
     setPressed(true); 
    } 
    return super.onTouchEvent(event); 
}