1

我对Android编程有点陌生,所以请耐心等待......

我正在学习来自Google Android - Pickers的教程,但是在完成之后,我不知道如何在原始活动中返回和显示选定的日期。

如果现在听起来很混乱,我目前有 2 个类 - ClassA.javaClassB.java,其中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];
}

一旦用户在Spinner ( TextView ) 上点击 ( onClick ),我在ClassA中的函数将使用以下代码:

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

所以问题是,我从哪里开始存储数据?我是获取从ClassBClassA的返回值(甚至还有返回值吗?)并将其存储到一个Bundle中(同时还更新 R.id.TextViewSpinner),还是在用户在里面时保存它DialogFragment ClassB)?

编辑

我才意识到我的错误。ClassB本身是一个单独的活动,因此Spinner ( TextView ) 的更改和 Bundle 的存储应该在ClassB中完成......

不过有一个小问题。

我正在使用(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;
    }
}

这是通过谷歌教程。我一直在这里和那里进行调整,但它总是让我回到原点......

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 回答