0

別のメソッドから入力を取得しようとしていて、後でその入力を使用していますが、アプリは入力を待ちません。

私が実行しているコードは

case (R.id.menuSort):
         sSort = sortPopup();
         layout.removeAllViews();                           
         arrlst.clear();
         checkLogs();

ここで、sortPopup は、ダイアログを作成して文字列を返すメソッドです。ボタンをクリックすると、ダイアログからオプションを選択する前に、removeAllViews、clear、および checkLogs 関数がすべて開始されます。

待機と通知を使用しようとしましたが、この同様の問題でいくつかのスレッドを読んだ後でも、プログラムがクラッシュせずに目標を達成できません。

sortPopup メソッドから結果が得られる前に 3 つの関数が開始されないようにする方法はありますか?

onPopup コードは次のとおりです。

    public String sortPopup() {
    initializePopup(arrsSort);
    new AlertDialog.Builder(this).setTitle("Select Sort")
            .setAdapter(adapter, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    if (arrsSort[which] == "Ascending") {
                        sChoice = "ASC";
                    } else {
                        sChoice = "DESC";
                    }

                }
            }).create().show();

    return sChoice;
}
4

2 に答える 2

0

次の方法でダイアログを作成して表示できます。

AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // Call your methods that wait for dialog input.
    }
});
AlertDialog dialog = builder.create();
dialog.show();
于 2013-05-24T12:16:28.987 に答える
0

この方法でコードを変更できます。

public void sortPopup() {
    initializePopup(arrsSort);
    new AlertDialog.Builder(this).setTitle("Select Sort")
            .setAdapter(adapter, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    if (arrsSort[which] == "Ascending") {
                        sChoice = "ASC";
                    } else {
                        sChoice = "DESC";
                    }

                    layout.removeAllViews();
                    arrlst.clear();
                    checkLogs();
                }
            }).create().show();
      //You cant try call checkLogs() here
}

このようにして、コードは待機を必要としません...

于 2013-05-24T09:13:53.123 に答える