0

インターフェイスから関数をオーバーライドしています(変更できません)、たとえば

public abstract int getResult();

この関数では、AlertDialog を使用して、結果がどうあるべきかをユーザーに尋ねたいと思います。したがって、私の実装は次のようになります。

public int getResult() {
    int result;

    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which){
            case DialogInterface.BUTTON_POSITIVE:
                result = 1;
                break;

            case DialogInterface.BUTTON_NEGATIVE:
                result = 2;
                break;
            }
        }
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("What is the result?").setPositiveButton("1", dialogClickListener)
        .setNegativeButton("2", dialogClickListener).show();

    return result;
}

明らかに、これは AlertDialog の非同期性のために機能しません。このような状況に対処する適切な方法は何ですか?

4

1 に答える 1

0

このコードは、次のような UI スレッドでのみ実行する必要があります。

runOnUiThread(new Runnable() {
        public void run() {
            getResult();
        }
    });

また

    public int getResult(){
       runOnUiThread(new Runnable() {
        public void run() {
            // your code
        }
    });
 }
于 2013-02-11T13:22:44.577 に答える