0

の形式のメッセージでユーザーにフィードバックする必要があるさまざまな状態がありますAlertDialog。アラートごとに個別のクラスを作成するのは正気ではありません。私が今持っているものは次のとおりです。

class FeedbackAlertDialog extends DialogFragment {
    private String message;
    private int action;

    FeedbackAlertDialog() {
    }

    FeedbackAlertDialog(String message, int action) {
        this.message = message;
        this.action = action;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        return new AlertDialog.Builder(getActivity())
                .setCancelable(false)
                .setTitle(message)
                .setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        switch (action) {
                            case action: // It's impossible because the int should be final
                        }
                        startActivity(new Intent(getActivity(), MainActivity.class));
                    }
                }).show();
    }
}

問題は、最終的なものであるswitchため使用できないことです。intこの状況をどのように考え出しますか?

4

3 に答える 3

0

使用する:

FeedbackAlertDialog.this.action

私が見る限り、これはスイッチにあるはずです。

これと同じ方法で、より高いレベルの変数 (単純なモデルの通知セッター) にアクセスできます。

あなたの場合、最初にルートオブジェクトのスコープに入る必要があります(あなたの場合はFeedbackAlertDialog)。

于 2012-07-17T14:40:38.713 に答える
0

編集 ::

お使いのコンピュータ システムで次の簡単な Java デモを試してください。

public class CalcDemo {
    public static void main(String[] args) {
        int n1 = 6, n2 = 3;
        int opr = 1;
        MyMath math = new MyMath(n1, n2, opr);
        System.out.println("Answer :: "+math.getResult());
    }
}

class MyMath {
    int n1, n2, opr;

    public MyMath() {   }
    public MyMath(int n1, int n2, int opr) {
        this.n1 = n1;
        this.n2 = n2;
        this.opr = opr;
    }
    public int getResult() {
        //int ch = opr;
        switch (opr) {
        case 1: return n1-n2;
            //break;
        case 2: return n1+n2;
        default : System.out.println("Invalid Choice");
            break;
        }
        return 0;
    }
}

次のように1 つのトリックを行います。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    return new AlertDialog.Builder(getActivity())
            .setCancelable(false)
            .setTitle(message)
            .setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    final int action1 = action;  //  <---- ---  Try This
                    switch (action1) {  //  <--- ---  Use as This
                        case action1: // I THINK,  NOW  THIS  IS  POSSIBLE
                    }
                    startActivity(new Intent(getActivity(), MainActivity.class));
                }
            }).show();
}
于 2012-07-17T15:15:20.667 に答える
0

スイッチで定数を使用する必要があるため、不可能でした。

于 2012-07-18T06:53:24.123 に答える