1

NewDateFragment と NewEventFrament の間に文字列 curDate を渡す必要があります。多くの人が Bundle を使用していますが、これらを使用しても NullPointerException が発生します。

CalendarView を curDate という名前の 1 つの文字列に変換します。

public class NewDateFragment extends Fragment {

public String curDate;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_newdate,
            container, false);


    CalendarView calendar = (CalendarView) view.findViewById(R.id.calendarView);

    //sets the listener to be notified upon selected date change.
    calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
        @Override
        public void onSelectedDayChange(CalendarView view, int year, int month, int day) {
            curDate = day + "/" + month + "/" + year;

            NewDateFragment fragment = new NewDateFragment();
            Bundle bundle = new Bundle();
            bundle.putString("date", curDate);
            fragment.setArguments(bundle);

            Log.d("Current Date:", curDate);
        }
    });

}

public class NewEventFragment extends Fragment {

     // relative code inside onCreateView
     Bundle b = getActivity().getIntent().getExtras();
        final String dDate = b.getString("date");
}

私のログキャット:

10-08 18:34:49.036 10293-10293/com.org.feedme.cisvmeeting.activities W/dalvikvm﹕ threadid=1: キャッチされない例外で終了するスレッド (group=0x41640d88) 10-08 18:34:49.056 10293-10293 /com.org.feedme.cisvmeeting.activities E/AndroidRuntime﹕ 致命的な例外: メイン プロセス: com.org.feedme.cisvmeeting.activities、PID: 10293 java.lang.NullPointerException at com.org.feedme.fragments.NewEventFragment.attemptCreate (NewEventFragment.java:116) com.org.feedme.fragments.NewEventFragment$1.onClick(NewEventFragment.java:61) で android.view.View.performClick(View.java:4569) で android.view.View$PerformClick .run(View.java:18570) で android.os.Handler.handleCallback(Handler.java:743) で android.os.Handler.dispatchMessage(Handler.java:99) で android.os.java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で java.lang.reflect.Method.invoke( Method.java:515) で com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) で com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) で dalvik.system .NativeStart.main(ネイティブメソッド)ZygoteInit.main(ZygoteInit.java:602) at dalvik.system.NativeStart.main(ネイティブ メソッド)ZygoteInit.main(ZygoteInit.java:602) at dalvik.system.NativeStart.main(ネイティブ メソッド)

助けてくれてありがとう!

4

2 に答える 2

0

それらが同じアクティビティ内のフラグメントである場合、アクティビティを使用してそれらの間のデータに非常に簡単にアクセスできます。

ステップ 1: で String curDate を宣言しますActivity

public String curDate; //you could also make it private and add a public getter & setter

ステップ 2:NewDateFragment内でonSelectedDayChange()、アクティビティの curDate を計算した現在の日付に設定します。

getActivity().curDate = curDate;

ステップ 3:NewEventFragmentで、アクティビティから値を取得します。

public String curDate = getActivity().curDate;
于 2015-10-08T21:50:11.313 に答える