2016-10-22 6 views
0

したがって、別のクラスのMainActivtyから変数にアクセスする必要があります。そうする最善の方法は何ですか。以下はシナリオですが、私は呼び出すことはできませんfrag.receiveInt(give_this_int_to_fragment);別の拡張クラスのMainActivityからvarにアクセス

MainActivity.java:

import com.me.fragments.FragmentExtender 

    public class MainActivity{ 
     int give_this_int_to_fragment; 

     protected void onCreate(...){ 
      Fragment frag = new FragmentExtender(); 
      give_this_int_to_frag = new int(); 
      frag.receiveInt(give_this_int_to_frag); 
     } 
    } 

FragmentExtender.java:私は、ちょうどポインタを重複して変数を作成しようとしていないよ

public class FragmentExtender extends Fragment{ 
     int receive_int_from_main; 

     public View onCreateView(...){...} 

     receiveInt(int_from_main){ 
       receive_int_from_main = int_from_main; 
     } 
    } 

あなたが私のドリフトをキャッチするならMainActivityのその変数。

+0

あなたは基本的にActivityからFragmentに値を渡したいと思っていますか? –

+0

はい。回答した人には、私は両方のバージョンを試し、どちらが自分のワークフローに最も適しているかを見ていきます。私はupvoteに戻るでしょう。 – John

答えて

3

の断片には、よりエレガントな方法をアクティビティコンテキストを取得し、

public class FragmentExtender extends Fragment{ 


    public View onCreateView(...){ 
     //.... 
     int var = ((MainActivity) getActivity()).getgive_this_int_to_fragment(); 

    } 
} 
0

ゲッターを呼び出すためにgetActivityを()を使用することができ、活動に

public class MainActivity{ 
    int give_this_int_to_fragment; 

    protected void onCreate(...){ 
     Fragment frag = new FragmentExtender(); 

    } 
} 

public int getgive_this_int_to_fragment(){ 
    return give_this_int_to_fragment; 
} 
public void getgive_this_int_to_fragment(int var){ 
    give_this_int_to_fragment = var; 
} 

をその変数に対するゲッターとセッターをします作成します。 Fragmentにインターフェースを実装し、アプリがそれを継承するようにしてください。そうすれば、あなたはそのようにコミュニケートすることができます。このコードでは

interface FragmentInterface{ 
    Object getMainValue(); 
    void passValueToMain(Object obj); 
} 

、あなただけのMainActivity宣言にとフラグメントコンストラクタで

public class MainActivity implements FragmentInterface{ 
    int give_this_int_to_fragment; 

    protected void onCreate(...){ 
     Fragment frag = new FragmentExtender(); 
     .... 
    } 
} 

それを追加する必要があります。そしてフラグメント

public class FragmentExtender extends Fragment{ 
    private FragmentInterface mInterface; 
    int receive_int_from_main; 

    public View onCreateView(...){...} 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     setListeners(context); 
    } 

    //This is for pre Marshmallow versions 
    @SuppressWarnings("deprecation") 
    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
      setListeners(activity); 
     } 
    } 

    private void setListeners(Object object) { 
     if (object instanceof FragmentInterface) { 
      mListener = (FragmentInterface) object; 
     } else { 
      throw new RuntimeException(object.toString() 
       + " must implement FragmentInterface"); 
     } 
    } 
} 

にこれはどんなのために動作しますフラグメントとそれを実装するアクティビティ

+0

フラグメントクラスファイルを編集しない方法はありますか?私は2つのファイルMainActivityとFragmentExtender – John

+0

の中に物事を保持したい同じFragmentExtenderクラス内にFragmentListenerを作成することはできますが、それは他のフラグメントで再利用するのがはっきりしないでしょう – zon7

関連する問題