1

AlertDialog介して実装していDialogFragment.onCreateDialog()ます。ダイアログには、[ EditTextOK] と [キャンセル] の 1 つと 2 つのボタンがあります。[OK] ボタンがクリックされたら、の内容を確認する必要がありますEditText。内容が間違っている場合は、ダイアログを閉じてはいけません。SO で検索すると、この機能は次の方法で簡単に実現できることがわかりました。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    view = getActivity().getLayoutInflater().inflate(AD_LAYOUT, null);
    mEditText = (EditText) view.findViewById(AD_VIEW);
    myAlertDialog = new AlertDialog.Builder(getActivity())
    .setView(view)
    .setTitle(getResources().getString(AD_TITLE))
    .setPositiveButton(getResources().getString(AD_PB),
            new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonID) {
            //Do nothing. We are going to override this method
        }
    })
    .setNegativeButton(getResources().getString(AD_NB),
            new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonID) {
            ((MainActivity)getActivity()).doNegative(NewGalleryDlg.this);
        }
    })
    .create();
    ad = myAlertDlg;

    ad.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button b = ad.getButton(AlertDialog.BUTTON_POSITIVE);
            b.setOnClickListener(new View.OnClickListener(){
                @Override public void onClick(View view) {
                    ((MainActivity)getActivity())
                    .doPositive(NewGalleryDlg.this, mEditText);
                }
            });
        }
    });
    return ad;
}

問題は、サポート ライブラリ v4 を使用しているのに、setOnShowListener()API レベル 8 以上が必要なことです。誰かが私に代わりを与えることができますか?ティア

4

3 に答える 3

1

OK、最終的に私は別のアプローチを使用してそれを解決しました。AlertDialog.setOnShowListener()(APIレベル> 7の場合は正常に機能します)を使用する代わりに、のにバリデーターを追加しましEditTextAlertDialog。入力したテキストが無効な場合、[OK]ボタンは無効になります。

実装手順は次のとおりです。

  • TextWatcherインターフェイスを実装するアクティビティを作成します
  • 検証を実行し、[OK]ボタンを有効/無効にするコードがafterTextChanged()含まれています
  • DialogFragment.onCreateDialog()EditTextにTextChangedリスナーを追加します(以下を参照)

それで全部です。今では魅力のように機能します。

mEditText.addTextChangedListener((MainActivity)getActivity());
于 2012-08-15T11:50:19.573 に答える
0

マニフェストファイルのテーマダイアログとしてレイアウト(edittext、ボタン、その他のウィジェットを使用して設計)を持つ特定のアクティビティを膨らませてみてください

于 2012-08-14T17:20:29.563 に答える
0

を使用してボタンを取得し、直接findViewById()設定するとどうなりonClickListenerますか? それが機能する場合は必要ないかもしれませんonShowListener

于 2012-08-14T17:29:40.877 に答える