2017-11-08 17 views
0

私の活動では、ViewPagerTabLayoutを使用して2つのフラグメントを使用しています。私はActivityと私のFragmentsの間でデータを送受信したいです。Android:フラグメントとアクティビティ間で効率的にデータを送受信する方法は?

この問題を解決するには、static変数のクラスを使用することをお勧めしません。多くのメモリとリソースを失うことなくこのタスクを実行するより良い方法がありますか?静的データメンバーはアプリのライフサイクル全体で死ぬことはないためです。だから彼らは決して記憶の塊を解放しない。これは、アプリがSamsungのデバイスで動作する上で大きな問題であるか、またはのRAMの使用を制限するルートになっていないデバイスと言えるでしょう。

+0

可能性の重複:https://stackoverflow.com/questions/14247954/communicating-between-a-fragment-and-an-activity-best-practices# – Kuffs

答えて

3

インターフェイスを使用します。以下はFragmentActivityの間の通信方法の例と詳細を含むAndroidのdocの抜粋です。逆の場合はDefine an Interfaceです。

Fragmentがアクティビティまで通信できるようにするには、Fragmentクラスでインターフェイスを定義し、アクティビティ内に実装することができます。フラグメントは、onAttach()ライフサイクルメソッド中にインタフェース実装を取得し、アクティビティと通信するためにInterfaceメソッドを呼び出すことができます。

これにより、お客様のFragmentはモジュール化され、同じFragmentを複数のアクティビティで再利用することができます。 を新しいActivityに実装するだけです。

1

2通りの方法で対応できます。 最初の方法はインターフェイスを定義することです。 interface example 2番目の方法は、eventbusです。 eventbus library

私の好みのイベントバス。可能であれば、rxjavaを学んでそこのイベントロジックでやってください。ここRxjava tutorial

1

アクティビティへの通信フラグメントの例である:

パブリッククラスHeadlinesFragmentはListFragment { OnHeadlineSelectedListener mCallbackを拡張します。

// Container Activity must implement this interface 
public interface OnHeadlineSelectedListener { 
    public void onArticleSelected(int position); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    // This makes sure that the container activity has implemented 
    // the callback interface. If not, it throws an exception 
    try { 
     mCallback = (OnHeadlineSelectedListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnHeadlineSelectedListener"); 
    } 
} 

}

関連する問題