2012-11-29 22 views
8

アクティビティのデータをフラグメントに渡すときに問題が発生します。私は周りを捜したが、自分の状況に合った答えを見つけられなかった。 私はCurrentFragment.javaHistoryFragment.javaという2つのフラグメントクラスを持っています。アクティビティのタブとして初期化します。アクティビティのデータをフラグメントに渡す方法

Tab tab = actionBar.newTab() 
      .setText(R.string.tab_current) 
      .setTabListener(new TaskitTabListener<CurrentFragment>(
        this, "current", CurrentFragment.class)); 
    actionBar.addTab(tab); 

    tab = actionBar.newTab() 
      .setText(R.string.tab_history) 
      .setTabListener(new TaskitTabListener<HistoryFragment>(
        this, "history", HistoryFragment.class)); 
    actionBar.addTab(tab); 

Iは断片的に活動中setArgumentsgetArgumentsを使用するように言われました。しかし、この状況では、どのようにしてアクティビティでフラグメントオブジェクトを取得できますか?私はgetFragmentManager().findFragmentById()を使用することはできません。フラグメントはプログラムによって追加されるからです。

また、getActivity()をフラグメントで使用してActivityコンテナ内のデータにアクセスするとの記事がありますが、私にとってはnullが返され続けます。誰かがその実例を持っていますか?

+0

private DataPullingInterface mHostInterface; public void onAttach(Activity activity) { super.onAttach(activity); if(D) Log.d(TAG, "onAttach"); try { mHostInterface = (DataPullingInterface) activity; } catch(ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement DataPullingInterface"); } String myData = mHostInterface.getData(); } 
[ONATTACH(http://developer.android.com/reference/android/support/v4/app/Fragment.html#onAttach%28androidで 'getActivity()' 'null'なので復帰を行います。 app.Activity%29)メソッド? – svenkapudija

+0

TaskitTabListener.onTabSelected()にsetArgumentsを設定してみてください。 – faylon

+0

@svenkapudijaはい、それは 'onAttach'でヌルを返します。 – OckhamTheRazor

答えて

7

[編集]私はあなたの質問にうまく対応するために私の答えを更新しました。

タグでフラグメントを取得するには、getFragmentManager().findFragmentByTag("tag")を使用することもできます。ただし、タブがまだ表示されていない場合は、フラグメントは存在しません。

CurrentFragment curFrag = (CurrentFragment) 
    getFragmentManager().findFragmentByTag("current"); 
if(curFrag == null) { 
    // The user hasn't viewed this tab yet 
} else { 
    // Here's your data is a custom function you wrote to receive data as a fragment 
    curFrag.heresYourData(data) 
} 

フラグメントがアクティビティからデータをプルするようにするには、アクティビティでフラグメントによって定義されたインターフェイスを実装します。フラグメントのライフサイクル機能では、フラグメントを作成したアクティビティにアクセスできるため、定義したインタフェースとしてそのアクティビティをキャストして関数呼び出しを行うことができます。以下のようなあなたの活動のインターフェイスを実装次に

public interface DataPullingInterface { 
    public String getData(); 
} 

:これを行うには、この(あなたは多くの断片のうち、同じインターフェイスを共有したい場合は、インターフェイス独自のファイル作ることができます)のようなあなたのフラグメントにインタフェースを入れますこの:CurrentFragmentであなたのonAttach(Activity activity)方法で最後に

public class MyActivity extends Activity implements DataPullingInterface { 
    // Your activity code here 
    public String getData() { 
     return "This is my data" 
    } 
} 

は、あなたがこれらの機能を呼び出すことができますので、あなたが作成したインターフェイスとしてあなたが受け取る活動をキャスト。

+0

答えをありがとう、しかし、それは "断片によって定義されたインターフェイス"を意味するものを説明することができますか? – OckhamTheRazor

+0

私はコメントできれいなコードを行うことができないので私の答えを更新しました。あなたの答えをチェックしてください。 –

+0

恐ろしい!それは私のために働く。ご協力いただきありがとうございます。 – OckhamTheRazor

関連する問題