2012-04-09 8 views
1

私はタッチイベントを無効にするカスタムViewpagerを持っています。そこで、私は、ビューページを制御するボタン「次へ」と「戻る」を持っています。私の質問は、ビューページ内のフラグメント間でデータやバンドルを渡す方法です。通常は動作しますが、フラグメントが表示されていなくても作成されていることがわかります。これは、ビューページスライドの効果のために、効果を出すためにフラグメントを先行させる必要があります。つまり、フラグメントがすでに作成されているのでバンドルを使用できません。これは私がやろうとしているものですViewpagerはフラグメント間でバンドルを渡します

フラグメント1 - >フラグメント2 - >断片3

フラグメント1が作成され、私は「次へ」フラグメント2が示されている押すとその断片2です。もう一度「次へ」を押すとフラグメント3にバンドルを渡したいが、フラグメント3は既に作成されているので機能しない。

私が考えた別の方法は、ViewPagerが現在のItemとして設定したときに、各Fragmentでメソッドを呼び出すことです。

+0

作成時にデータが存在する必要がありますか、表示する直前にデータを渡すと問題はありませんか? – dmon

+0

@dmonそれを表示する直前にそこにいる必要があります。 「2次」と同様に、「次へ」を押すと右にデータが渡され、次に3番のフラグメントが表示されます。 –

答えて

1

すべてのフラグメントで実装されているインターフェイスを作成してみませんか?このインターフェイスには、getParameterData()setParameterData()の2つのメソッドがあります。 ViewPagerで、nextまたはpreviousを押すと、現在のフラグメントでgetParameterData()を呼び出し、表示するフラグメントでsetParameterData()を呼び出します。

+0

うわー、私は決してそれについて考えなかった、ありがとう。もう一つ。私は、フラグメントにsetUserVisibleHint(boolean isVisibleToUser)というメソッドがあることに気付きました。これは、フラグメントがUIに表示されるときを意味しますか? Viewpagerが、そのメソッドが呼び出される現在のItemとして設定します。 –

+0

それは、わからないかもしれません。あなたは 'onResume()'をオーバーライドしようとしましたか? – dmon

+0

私はonResume()を使用しましたが、フラグメントが作成されているときに呼び出されます。これは画面外です。それはうまくいきませんでした。 setUserVisibleHintは、私がしようとしていることに対して完全に機能します。私はisVisibleToUserブール値が画面に表示されているかどうかを確認するだけです。 –

1

ホストアクティビティでオブジェクトを保持することで、フラグメント間でオブジェクトを共有/渡すことができます。

関連する問題