2

我会承认的。我没有在 Android 上实现 Bundles 和 Intents。

即使读了这么久,也让我很困惑。

我基本了解:

Intents就像给同一个街区的另一个人打电话。

Bundles是在应用程序退出时被删除的临时存储包。

我不明白的是如何使用它们。我看到很多示例解释如何立即将它们放入您的活动中,但根本没有进一步的解释。

像this questionhttp://stackoverflow.com/questions/768969/passing-a-bundle-on-startactivity/819427#comment17818750_819427这样的东西提供了代码和一个非常基本的解释,但并没有真正详细说明如何使用它。

我正在使用该问题推荐的解决方案,但我的应用程序总是崩溃,因为我什至可能不明白我实际上在做什么。

是否有人可以提供或链接到我的 Android Bundles / Intents 的详细说明?

我已经看到了 Android Bundles 和 Intents 的示例以及他们总是建议的代码块。

我不明白的是如何使用它。您在哪里创建“创建新捆绑包”?

'Example.class' in Intent mIntent = new Intent(this, ActivityA.class);它指向哪里?

编辑:CapDroid 要求我提供代码,所以这里是 -

假设我现在有两个课程,ActivityA并且ActivityB.

public class ActivityA extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.notify_main);

        // Do I create the bundle here? [APP CRASHES]
        // Intent mIntent = new Intent(this, ActivityA.class);
        // Bundle mBundle = new Bundle();
        // mBundle.extras.putString(key, value);
        // mIntent.putExtras(mBundle);
    }

    // onClick Execute Method (TextView acting as a Spinner)
    public void DatePicker(View v) {
        // Create a new DialogFragment (DateFragment)
        DialogFragment TimeFragment = new ActivityB();
        DateFragment.show(getSupportFragmentManager(), "DatePicker");

        // Opens up ActivityB, user selects date
        // ActivityB displays the selected date back in ActivityA
    }

    // onClick Execute Method (Button)
    public void Save(View v) {
        // Method to save all the data (ActivityB result, in future ActivityC, ActivityD, etc) in a database
        // String dayValue = getIntent().getExtras().getString(APP_KEY_DAY)
        // String mthValue = getIntent().getExtras().getString(APP_KEY_MTH)
        // String yearValue = getIntent().getExtras().getString(APP_KEY_YEAR)
    }
}

该应用程序包含一个 TextView(充当日期输入的 Spinner)。

现在我想将用户选择的日期保存在 ActivityB(原始输入数据)或 ActivityA(从 TextView 获取信息)中。不过,最好在 ActivityB 中,原始数据比字符串 (TextView) 更容易处理。

这是 ActivityB :

public class ActivityB 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) {

        // Saves year month day into a Bundle, send it back to ActivityA [APP CRASHES]
        // This is what i did :
        // Intent mIntent = new Intent(this, ActivityA.class);
        // Bundle extras = mIntent.getExtras();
        // extras.putString(APP_KEY_DAY, day);
        // extras.putString(APP_KEY_MTH, month);
        // extras.putString(APP_KEY_YEAR, year);

        //Changes the values on TextView.
        ((TextView)this.getActivity().findViewById(R.id.ActivitySpinner)).setText(day + " " + month + " " + year);

    return;
}

我认为用户能够将 ActivityB 中的选定日期保存在 Bundle 中,然后将 Bundle 传输回 ActivityA。这是因为我将有多个值,而不仅仅是一个 TextView

我希望这个解释有所帮助。

4

2 回答 2

0

让我尽量让这件事变得简单。

意图: 这些基本上是在活动之间传递的消息。最常见的用例是开始一个新的活动。

例如: ActivityA 需要启动 ActivityB,它会调用startActivity或者最好还是调用startActivityForResult

如果您想将一些数据从 ActivityA 传递到 ActivityB。您可以在 Intents 中使用 putExtra 方法来做到这一点。这基本上使用了意图中的捆绑包。

一个更重要的方面是如何将数据从 ActivityB 返回到 ActivityA。在这里,我们在完成活动之前在 ActivityB 中使用我们称为setResult的内容。然后可以在onActivityResult中访问数据

在此处查看一些示例

于 2012-11-10T06:40:06.617 回答
0

Nowadays you would probably rather use Fragments and LocalBroadcastManager to pass information from an Activity to a Fragment and vice-versa.

于 2016-07-15T15:01:03.843 回答