2

私はそれを認めます。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 だけでなく、複数の値を持つことになるためです。

この説明がお役に立てば幸いです。

4

2 に答える 2

0

これをできるだけ簡単にしようと思います。

インテント: これらは基本的に、アクティビティ間で受け渡されるメッセージです。最も一般的な使用例は、新しいアクティビティを開始することです。

たとえば、ActivityAはActivityBを開始する必要があります。これにより、startActivityが呼び出されるか、startActivityForResultが呼び出されます。

ActivityAからActivityBにデータを渡したい場合。これを行うには、インテントでputExtraメソッドを使用できます。これは基本的にインテント内のバンドルを使用します。

もう1つの重要な側面は、ActivityBからActivityAにデータを返す方法です。ここでは、アクティビティを終了する前に、ActivityBでsetResultと呼ばれるものを使用します。その後、 onActivityResultでデータにアクセスできます

ここでいくつかの例を確認してください

于 2012-11-10T06:40:06.617 に答える
0

最近では、FragmentsLocalBroadcastManagerを使用して、Activity から Fragment に、またはその逆に情報を渡すことをお勧めします。

于 2016-07-15T15:01:03.843 に答える