2016-10-01 10 views
-2

フラグメント2からMainActivityのAsk()関数を呼び出すとします。 MainActivityの関数をfragment2から呼び出すにはどうすればよいですか? 結果をfragment2から呼び出されたページにインポートします。フラグメントのアクティビティの関数を呼び出す

編集: 私は既にその議論を見ていますが、私の問題の解決策はありません。

+0

[フラグメントからのアクティビティメソッドを呼び出す]の可能な複製(0120-17753-1) –

+0

これは ' getActivity() 'を呼び出してMainActivityにキャストしますが、フラグメントとアクティビティを切り離すので、インターフェイスを使用する方が良いです。http://stackoverflow.com/a/31798511/4409409 –

+0

インターフェイスを使用して、主な活動。 –

答えて

0

この関数を静的にすると、その後、その関数をフラグメントなどにアクセスできます。 MainActivity.Ask();

フラグメントからactivtyへ
0

((YourActivityClassName)getActivity()).yourPublicMethod(); 

活動からのフラグメントへ:

FragmentManager fm = getSupportFragmentManager(); 

//if you added fragment via layout xml 
YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id); 
fragment.yourPublicMethod(); 

あなたがコードを経由してフラグメントを追加し、あなたのフラグメントを追加したときに、タグの文字列を使用している場合は、代わりにfindFragmentByTagを使用します。

YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag"); 

乾杯!

+0

私は既にこのメソッドを試していましたが、自分のコードでは動作しません。 – Question

+0

@Questionここにコードを書いてください。そして、私たち(StackOverFlow)はあなたのコードに何が間違っているのかを理解することができます。 –

0

this documentationとお読みください。

フラグメント2からのMainActivityの関数Ask()を呼び出します。

このためには、fragment2interfaceを作成する必要があります。以下のコードは、このドキュメントの例です。フラグメント内のonAttachメソッドも無視しないでください。

public class Fragment2 extends ListFragment { 
    OnCallActivityListener mCallback; 

    // Container Activity must implement this interface 
    public interface OnCallActivityListener { 
     public void callAskMethod(); 
    } 

    @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 = (OnCallActivityListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnHeadlineSelectedListener"); 
     } 
    } 

    ... 
} 

今断片はOnCallActivityListenerインターフェースのmCallbackインスタンスを使用してcallAskMethod()方法(又はインタフェースで他の方法)を呼び出すことにより、活性にメッセージを配信することができます。

たとえば、ユーザーがリスト項目をクリックすると、フラグメント内の次のメソッドが呼び出されます。このフラグメントは、コールバック・インターフェースを使用して、イベントを親アクティビティに配信します。

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    // Send the event to the host activity 
    mCallback.callAskMethod(); 
} 

その後、ホストアクティビティにインターフェイスを実装する必要があります。

public static class MainActivity extends Activity 
     implements Fragment2.OnCallActivityListener{ 
    ... 

    public void callAskMethod() { 
     // Do something here 
     ask(); 
    } 
} 

そうです。 fragment2フラグメントからask()メソッドを呼び出しました。

結果をfragment2から呼び出されたページにインポートします。

ホストの活動は、findFragmentById()Fragmentインスタンスを取得することにより、フラグメントにメッセージを配信、直接フラグメントのパブリックメソッドを呼び出すことができます。

あなたの `` MainActivity`では、結果をフラグメントに送ることができます。

Fragment2 fragment2 = (Fragment2) getSupportFragmentManager().findFragmentById(R.id.article_fragment); 

だから、MainActivityFragment2のインスタンス値を持っています。だから、そこからのfragment2の公の方法があります。それだ例えば

fragment2.doSomething(); 

関連する問題