1

私はAndroidプログラミングに少し慣れていないので、ここで我慢してください...

Google Android - Pickersのチュートリアルに従っていますが、フォローした後、元のアクティビティで選択した日付を返して表示する方法がわかりません。

これが非常に紛らわしいと思われる場合は、現在ClassA.javaClassB.javaの 2 つのクラスがあり、ClassAがメイン アクティビティで、ClassBがダイアログ フラグメントです。

以下のこの関数 (これはClassBにあります) はビュー、年、月、およびテキストを取り込んで何かを返すことを理解していますが、それをClassAのメイン関数に戻して現在選択されている値として表示する方法がわかりませんスピナーTextView)で。

public void onDateSet(DatePicker view, int year, int month, int day) {
    // Do something with the date chosen by the user
    return [something];
}

ClassAの私の関数は、ユーザーがスピナー( TextView )をタップ ( onClick )すると、以下のコードを使用します。

public void DatePicker(View v) {
    DialogFragment DateFragment = new NotifyDatePicker();
    DateFragment.show(getSupportFragmentManager(), "DatePicker");
}

問題は、データの保存をどこから開始するかということです。ClassBからClassAへの戻り値を取得して(戻り値さえありますか?)、それをBundleに格納しますか(同時に R.id.TextViewSpinner を更新します)、またはユーザーが内部にいる間にそれを保存しますか? DialogFragment ( ClassB ) ?

編集

私は自分の間違いに気づきました。ClassBはそれ自体が別のアクティビティであるため、Spinner ( TextView ) の変更と Bundle の保存はClassBで行う必要があります...

ただし、小さな問題が 1 つあります。

(TextView)findViewById(R.id.TextViewSpinner).setText(daymonthyear)を使用していますが、エラーが発生し続けます:

The method findViewById(int) is undefined for the type ClassB

インポート/インクルードするのを忘れたものはありますか?

フルコード

public class ClassB extends DialogFragment implements DatePickerDialog.OnDateSetListener {

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        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);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

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

        // Change TextViewSpinner here (setText)

        // Tried (TextView)findViewById(R.id.TextViewSpinner).setText(daymonthyear) - The method findViewById(int) is undefined for the type ClassB error returned

        // Tried (TextView)context.findViewById(R.id.TextViewSpinner) - context cannot be resolved error returned

        return;
    }
}

これはGoogle チュートリアル経由です。あちこち微調整してきましたが、いつも振り出しに戻ってしまいます...

4

2 に答える 2

1

最善の解決策ではないかもしれませんが、 を使用しDefaultSharedPreferencesて値を保存できます。

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

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    preferences.putInt("year", year);
    preferences.putInt("month", month);
    preferences.putInt("day", day;
    preferences.commit();

    return;
}

アクティビティ A で何かを行います。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
int year = preferences.getInt("year", 0);
int month = preferences.getInt("month", 0);
int day = preferences.getInt("day", 0);

(TextView)findViewById(R.id.TextViewSpinner).setText(day + "/" + month + "/" + year);    

これが役立つことを願っています。

TextViewSpinnerところで、大文字以外の文字で始まるような参照を使用することをお勧めします: textViewSpinner.

于 2012-10-24T09:44:54.600 に答える
1

実際には、共有設定を介して迂回する必要はありません。ClassBビューを探す場所を指定するだけです。

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

    // Change TextViewSpinner here (setText)

    // Tried (TextView)findViewById(R.id.TextViewSpinner).setText(daymonthyear)
    // - The method findViewById(int) is undefined for the type ClassB error returned

    // Instead try:
    (TextView) getActivity().findViewById(R.id.TextViewSpinner)
        .setText(day + "/" + month + "/" + year)

    // Tried (TextView)context.findViewById(R.id.TextViewSpinner)
    // - context cannot be resolved error returned

    return;
}

クラス拡張の完全なコードDialogFragment(あなたの場合ClassB)については、同様の質問に対する私のこの回答を参照してください。

于 2013-05-11T23:30:48.537 に答える