2

A、X、Y、Zの4つのアクティビティを持つアプリケーションがあります。

Aは一種の着陸アクティビティであり、データベースからの一連の情報をユーザーに表示します。

X、Y、およびZは、データを変更するためにAによって開始されるアクティビティです。これらのアクティビティは実際にはデータベースにクエリを実行しませんが、変更された情報をAに返します。Aはですべての作業を実行しonActivityResultます。フローは常にA->XまたはYまたはZ->Aです。これは完全に機能します。

私がやりたいのは、保存ボタンがクリックされるまで、ユーザーがX、Y、Zの間を何度でもナビゲートできるようにすることです。これにより、A-> X-> Y->Z->Aが可能になるようにフローが変更されます。ただし、データは、[保存]をクリックするアクティビティ(この例ではZ)からのみ永続化する必要があります。その後、AはZから結果を受け取り、この変更を処理して続行します。ユーザーがこのようにナビゲートした場合、XとYで何が起こったかは関係なく、それらは破棄されています。

私はこれを何度か試みました。finish()X、Y、またはZがA以外の別のアクティビティを開始した直後に呼び出すのが最善でした。これにより、ユーザーは[保存]をクリックするとAに戻ることができます。つまり、ナビゲーションの側面は正しいですが、送信される結果コードは常にRESULT_CANCELED。インテントフラグの使用を検討しましたがFLAG_FORWARD_RESULT、経験がなく、結果のためにすでに開始されているアクティビティで使用するとエラーがスローされます。私が読んだことから、呼び出し元のアクティビティと結果を返すアクティビティの間に1つのアクティビティがある場合にのみ使用されるため、これが適切な手法であるかどうかはわかりません。

そのような流れも可能ですか?基本的に、結果を得るために別のアクティビティを起動し、ユーザーがその2番目のアクティビティから任意の量のナビゲーションを実行できるようにし、ナビゲーションが完了したら結果を元のアクティビティに戻すためのアクティビティが必要です。X、Y、およびZがデータベースにアクセスするようにコードを変更することは可能ですが、可能であればそれを避けたいと思います。

4

1 に答える 1

2

ただし、データは、[保存]をクリックするアクティビティからのみ保持する必要があります。

私にとって最も簡単なことは、で使用せず、単に使用startActivityForResult(...)してから終了することだと思います。Activity AstartActivity(...)finish()Activity A

次に、他のいずれかがActivities[保存]ボタンをクリックしたときに、エキストラとして保存する必要のあるデータを呼び出しstartActivity(...)て渡すように依頼します。Activity AIntent

次に、効果的に「結果」を取得するためgetIntent()onCreate(...)メソッドで使用する必要があります。永続化されると予想されるデータが含まれるか含まれないActivity A場合、これは「最初の起動」シナリオですが、データが存在する場合は、他のいずれかの保存操作の結果として開始されたことがわかります。IntentnullActivity AActivities

于 2012-06-28T21:35:33.130 に答える