1

(この質問はさまざまな形で行われていることを知っています。私の状況の詳細を考慮していただきありがとうございます)。

サードパーティのライブラリを実装しています。メソッドの 1 つはユーザー入力を必要とし、このメソッドの戻り値はユーザーの response である必要があります。具体的には、このメソッドは警告ダイアログをポップアップする必要があります。ユーザーは 3 つのボタンから選択できます。このメソッドの戻り値は、ユーザーがクリックしたボタンを識別する int でなければなりません。

これを機能させる唯一の方法は、AsyncTask からこのアラート メソッドを呼び出し、そこから runOnUIThread を呼び出してアラートをポップアップし、応答を待つことです。私が立ち往生しているのは、このアラート メソッドが UI スレッドから呼び出されている場合です。この場合、応答を待つための同様の回避策はありますか?

これが現在のコードの外観です...このメソッドが AsyncTask から呼び出される限り、問題ありません。しかし、UI スレッドから呼び出すことができる必要があります。

public int getInput(final Object [] args)
{
    getActivity().runOnUiThread(new Runnable(){

        @Override
        public void run()
        {
            buildDialog(args).show();
        }
    });

    try
    {
        synchronized(this)
        {
            wait();
        }
    }
    catch (Exception ex)
    {
        return 0;
    }
    return m_Result;
}

public void setRetValue(int result)
{
    m_Result = result;
    synchronized(this)
    {
        notify();
    }
}

(setRetValue は、ダイアログ内のボタンの OnClickListeners で onClick から呼び出されます。)

4

0 に答える 0