我会承认的。我没有在 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。
我希望这个解释有所帮助。