私はそれを認めます。Android でバンドルとインテントを実装できません。
長い間読んだ後でも、とても混乱します。
基本的なレベルで次のことを理解しています。
インテントは、同じブロック内の別の人への電話のようなものです。
バンドルは、アプリケーションの終了時に削除される一時ストレージ パッケージです。
私が得られないのは、それらを使用する方法です。それらを即座にアクティビティに組み込む方法を説明する例はたくさんありますが、それ以上の説明はまったくありません。
コードと非常に基本的な説明を提供するこの質問のようなものhttp://stackoverflow.com/questions/768969/passing-a-bundle-on-startactivity/819427#comment17818750_819427
ですが、それを使用する方法については実際には詳しく説明していません。
その質問が推奨するソリューションを使用していますが、実際に何をしているのかさえ理解していない可能性があるため、アプリケーションは常にクラッシュします。
誰かが提供またはリンクできる Android バンドル/インテントの詳細な説明はありますか?
Android バンドルとインテントの例と、それらが常に提案するコード ブロックを見てきました。
私が理解していないのは、それを使用する方法です。「新しいバンドルの作成」はどこで作成しますか?
の 'Example.class' はIntent mIntent = new Intent(this, ActivityA.class);
、どこに向かうのですか?
編集:CapDroidは私にコードを提供するように頼んだので、ここにあります-
今、2 つのクラスがある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 (日付入力のスピナーとして機能する) で構成されます。
現在、ユーザーが選択した日付を、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 でバンドルに保存し、そのバンドルを ActivityA に戻すことができると考えています。これは、1 つの TextView だけでなく、複数の値を持つことになるためです。
この説明がお役に立てば幸いです。