2017-04-24 16 views
0

状況を考えてみましょう: mainActivityがあります。このアクティビティを作成すると、fragmentAfragmentBという2つのフラグメントを呼び出すことができます。同じアクティビティのインスタンスをフラグメントで取得する方法は?

mainActivityは、1つのゲッターgetValueと1つのセッターsetValueを持っています。

ほとんどの場合、これはアプリケーションの動作方法です。mainActivityが作成されます。そこからfragmentAが作成されます。 fragmentAで戻るボタンを押すと、アプリケーションはmainActivityに戻り、fragmentBに進みます。

私がしたいことは、setValuemainActivityfragmentAに入れて、その値をfragmentBにします。

両方のフラグメントに同じアクティビティインスタンスがないように見えるため、これを行うことはできません。

これは私がfragmentAfragmentBからmainActivityのセッター/ゲッターにアクセスしようとする方法である:((MainActivity)getContext()).getValue();

私が間違って何をしているのですか?

+0

の間の値を渡す方法これはバンドルオブジェクト

Bundle fragmentbundle = getArguments(); String value = fragmentbundle.getString(key); 

を作成します。 –

+0

このような感じです。 http://stackoverflow.com/questions/24777985/how-to-implement-onfragmentinteractionlistener –

+0

@marius 2番目のフラグメントに渡すgetValueは何ですか? –

答えて

0


キーは任意の文字列であることができるバンドル内

Bundle bundle = new Bundle(); 

インサート値(複数の値を渡すことができる)活性のビュンデオブジェクトを作成し、各値

bundle.setString(key,"value"); 

作成オブジェクトに一意である必要があります該当するフラグメントの番号を付けてバンドルを添付してください。

fragmentobject.setArguments(bundle); 
受信フラグメントで

は、あなたがここにMainActivityおよびフラグメントのコードを投稿してくださいフラグメントおよび活動や活動や活動

+0

確かに、これは最も正しい方法です。しかし、BigDecimalの値も渡す必要があります。私が知っている限り、それをStringに変換する必要はありません。 – Marius

+0

'String value =" 1,000,000,000.999999999999999 "; BigDecimal money =新しいBigDecimal(value.replaceAll( "、"、 "")); System.out.println(money); ' –

+0

@Marius' BigDecimal'は 'Serializable'です。 –

0

私は、以下の方法を使用することをお勧めします:

((MainActivity) getActivity()).getValue; 

また、MainActivitygetValue()メソッドがpublicに設定されていることを確認します。

私はこれが助けてくれることを願っています。

+0

私が知る限り、あなたはUI関連の仕事にgetActivityを使うべきです特定の適用状態を知るためのものです。 – Marius

+0

まあ、私は主な活動との間でデータを送受信するために私が言及した方法を使用します。もし私があなたを誤解したら、私を訂正してください。 –

+0

あなたのフラグメントを1つのアクティビティにカップリングすることは、貧弱なデザインです –

関連する問題