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 にバインドされButton( a が押されたときに実行されButtonます)、メッセージを投稿しますWM_RECORD_START。メッセージWM_RECORD_STARTが受信されると、メソッドOnRecordStart()が実行されます。

OnRecordStart()前に述べたように、応答性の高いユーザー インターフェイスを作成したいと考えていますが、メソッドが から直接呼び出された場合に十分かどうかはわかりませんRecordStart()

void RecordStart()
{
    OnRecordStart();
}

私は本当にあなたの提案をいただければ幸いです。

4

3 に答える 3

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

sの場合Button、通常はクラスを拡張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 に答える
1

ここで 2 つの質問があります。

  1. コントロールをバインドする方法。どこでも匿名の内部クラスを使用しています。入力するのは少し冗長ですが、オートコンプリートにより簡単に入力できます。

  2. UI をレスポンシブにする方法。重要なのは、UI スレッドで時間のかかることをしないことです。0.1 秒以上かかる場合は、ワーカー スレッドで作業を行い、タスクの完了時に更新するように UI に通知します。もう 1 つは、Android GC が現在非常に原始的であるため、大量のガベージを生成しないようにすることです。

于 2009-06-16T18:45:20.293 に答える