3

アクティビティのボタンを押すと、DialogFragment クラスが呼び出されます。このDialogFragmentで設定した日付をボタンのテキストに表示したい。FindViewById は、クラスによる認識を拒否します。

同様の質問を見つけましたが、それを私のケースに関連付けることができません。

コード:

  1. Dialogue フラグメントを呼び出すボタン:

    public void datepicker(View v) {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "datePicker"); 
    }
    
  2. ダイアログフラグメントのコード:

    public class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {
    
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceSateate) {
    
            final Calendar c = Calendar.getInstance();
                int year = c.get(Calendar.YEAR);
                int month = c.get(Calendar.MONTH);
                int day = c.get(Calendar.DAY_OF_MONTH);
    
                return new DatePickerDialog(getActivity(), this, year, month, day);
            }
    
            public void onDateSet(DatePicker view, int year, int month, int day) {
                // Do something with the date chosen
            }
        }
    }
    
4

4 に答える 4

10

ユーザーが日付を設定したときに通知を受けることを担当する DialogFragment のメソッドで、これを行います

Button activityButton = (Button)getActivity().findViewById(R.id.myButton);
activityButton.setText (myDate);
于 2012-12-24T19:23:27.040 に答える
1

従うべき良いパターンは次のとおりです。

  1. ダイアログ内で関連するボタンの押下を処理するために、ダイアログ内にリスナー インターフェイスを作成します。
  2. 開始アクティビティで実装します
  3. ユーザーが「OK」または「キャンセル」を押すと、リスナーメソッドが呼び出されます
  4. アクティビティのビューを更新するために、リスナーの実装で必要なことは何でも行います

何かのようなもの、

class MyDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {
  static interface Listener {
    void onOkay(MyObject result);
    void onCancel();
  }
  ...

  @Override
  public Dialog onCreateDialog(Bundle savedInstanceState) {
    ...

    // set this as a listener for ok / cancel buttons
    return new AlertDialog.Builder(activity)...whatever...
        .setPositiveButton(R.string.ok, this)
        .setNegativeButton(R.string.cancel, this).create();
  }

  @Override
  public void onClick(DialogInterface dialog, int which) {
      if (which == DialogInterface.BUTTON_POSITIVE) {
          if (getActivity() instanceof Listener) {
              ((Listener)getActivity()).onOkay(...);
          }
      } else {
          if (getActivity() instanceof Listener) {
              ((Listener)getActivity()).onCancel();
          }
      }
  }
}

class MyActivity extends Activity implements MyDialogFragment.Listener {
  ...
  @Override
  public void onOkay(MyObject result) {
    // update activity view here with result
  }

  @Override
  public void onCancel() {
    // anything?
  }
}

あなたの場合、onOkay()メソッドに渡される「結果」は、ダイアログでユーザーが選択した Date オブジェクトになります。

于 2012-12-24T19:22:18.963 に答える
0

AFragmentは ではありませんView。フラグメントを検索する場合は、from を使用findFragmentByIdFragmentManagerます。

于 2012-12-24T19:13:11.957 に答える