1

アプリに日付と時刻のフィールドを持つDialogFragment1(MyFragmentActivityによって呼び出されます)があります。ユーザーがそれらをクリックすると、DatePickerFragmentとTimePickerFragmentが表示されます。また、DialogFragmentsを拡張します。いつものようにそれらからDailogFragment1に値を戻したい:

public void onDateSet(DatePicker view, int year, int month, int day) {
        EditDateDialogListener activity = (EditDateDialogListener) getActivity();
        activity.onFinishDateDialog(day, month, year);

}

(いつものようにすべてを実装する前に)

public interface EditDateDialogListener{
void onFinishDateDialog(int day, int month,int year);
}

EditDateDialogListenerを実装するDialogFragment1では、次のようになります。

public void onFinishDateDialog(int day, int month, int year){
this.mDay=day;
this.mMonth=month;
this.mYear=year;
updateDateDisplay();

}しかし、ランタイムエラーが発生しました12-01 20:03:52.018:E / AndroidRuntime(756):java.lang.ClassCastException:MyFragmentActivityをDatePickerFragment$EditDateDialogListenerにキャストできません

これはアクティビティではなくダイアログフラグメントであることを理解していますが、どうすれば正しい方法で呼び出すことができますか?GetWHAT?お時間をいただきありがとうございます。

UPD:MyFragmentActivityはEditDateDialogListenerを実装していません。これは、この日付が必要ないためですが、DialogFragment1にあります。

public class MyFragmentActivity extends FragmentActivity{
4

2 に答える 2

2

添加

MyFragmentActivityはEditDateDialogListenerを実装していません。これは、このDateが必要ないためですが、DialogFragment1にあります。

そうか。次に、DailogFragment1は以下に説明するようにEditDateDialogListenerを実装する必要があり、以下onDateSet()を使用するように変更する必要がありますgetParentFragment()

public void onDateSet(DatePicker view, int year, int month, int day) {
    EditDateDialogListener listener = (EditDateDialogListener) getParentFragment();
    listener.onFinishDateDialog(day, month, year);
}

元の回答

開発者ガイドでこの例のようなことをしようとしていると思います。

このエラーはMyFragmentActivity、カスタムを実装していないことを意味しますEditDateDialogListener。これを変更するだけです:

public class MyFragementActivity extends FragmentActivity {

これに:

public class MyFragementActivity extends FragmentActivity implements EditDateDialogListener {
//                                             Add this:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

そして、リスナーのonFinishDateDialog()コールバックをオーバーライドします。


すべて一緒に変化しますMyFragmentActivity

public class MyFragementActivity extends FragmentActivity implements EditDateDialogListener {
    @Override
    public void onFinishDateDialog(int day, int month, int year) {
        // Do something
    }
    // The rest of your MyFragmentActivity code here
}

この行の上の変更でDatePickerFragment

EditDateDialogListener activity = (EditDateDialogListener) getActivity();  // It works!

これ以上例外をスローしません。

于 2012-12-01T20:32:14.197 に答える
1

私はこのqを解決しました。このように:MyFragmentActivityにはタグがあります:

DialogFragment dlg = MyFragmentActivity.newInstance(p1,p11, p2, p3);
dlg.show(getSupportFragmentManager(), "DataFragmentTag");

およびDatePickerFragment:

public void onDateSet(DatePicker view, int year, int month, int day) {

    EditDateDialogListener handler = (EditDateDialogListener) getActivity().getSupportFragmentManager().findFragmentByTag("DataFragmentTag");
    handler.onFinishDateDialog(day, month, year);
}
于 2012-12-02T08:31:40.867 に答える