2009-06-16 9 views
2

Ich bin ziemlich neu in Android und Java. Bevor ich mit C++ gearbeitet habe, wurden die Ereignisse mit Nachrichten versendet. Jetzt möchte ich die gleiche Benutzererfahrung für Android-Plattform erstellen und würde mich über Ihre Vorschläge oder Kommentare darüber freuen, wie Sie Ereignisse am besten an Benutzersteuerelemente binden können. HierAndroid: Best Practice für reaktionsschnelle Benutzeroberflächen

ist ein Beispiel von 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); 
} 

Im Fall über das Verfahren RecordStart() gebunden ist, an ein Button (es wird ausgeführt, wenn eine Button gedrückt wird) und die messa postet ge WM_RECORD_START. Wenn die Nachricht WM_RECORD_START empfangen wird, wird die Methode OnRecordStart() ausgeführt.

Wie bereits erwähnt, bevor ich eine ansprechende Benutzeroberfläche erstellen möchte und bin nicht sicher, ob es gut genug OnRecordStart() von RecordStart() direkt aufgerufen wird, wenn die Methode wäre:

void RecordStart() 
{ 
    OnRecordStart(); 
} 

ich wirklich zu schätzen, würde jede Ihres Vorschläge.

Antwort

6

Sie können das MFC-Stilverhalten in Android emulieren, indem Sie eine Handler verwenden, um eine Runnable in die Nachrichtenwarteschlange zu stellen.

Hier ist ein kurzes Beispiel

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

Sie haben hier zwei Fragen.

  1. Wie Sie Steuerelemente binden. Ich benutze anonyme innere Klassen überall. Es ist ein bisschen ausführlich zu tippen, aber die automatische Vervollständigung macht es zum Kinderspiel.

  2. wie Sie die Benutzeroberfläche reagieren lassen. Der Schlüssel ist keine Zeit im UI-Thread zu verbrauchen. Wenn es dauert mehr als .1s, tun Sie die Arbeit in ein Worker-Thread und benachrichtigen Sie die Benutzeroberfläche zu Update, wenn die Aufgabe erledigt ist. Die andere Sache ist, um sicherzustellen, dass Sie nicht viel Müll generieren, da die Android-GC ist ziemlich primitiv jetzt.

1

Für Button s ich in der Regel Button Klasse erweitern und onTouchEvent()

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