フラグメント2からMainActivityのAsk()関数を呼び出すとします。 MainActivityの関数をfragment2から呼び出すにはどうすればよいですか? 結果をfragment2から呼び出されたページにインポートします。フラグメントのアクティビティの関数を呼び出す
編集: 私は既にその議論を見ていますが、私の問題の解決策はありません。
フラグメント2からMainActivityのAsk()関数を呼び出すとします。 MainActivityの関数をfragment2から呼び出すにはどうすればよいですか? 結果をfragment2から呼び出されたページにインポートします。フラグメントのアクティビティの関数を呼び出す
編集: 私は既にその議論を見ていますが、私の問題の解決策はありません。
この関数を静的にすると、その後、その関数をフラグメントなどにアクセスできます。 MainActivity.Ask();
フラグメントからactivtyへ:
((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");
乾杯!
私は既にこのメソッドを試していましたが、自分のコードでは動作しません。 – Question
@Questionここにコードを書いてください。そして、私たち(StackOverFlow)はあなたのコードに何が間違っているのかを理解することができます。 –
this documentationとお読みください。
フラグメント2からのMainActivityの関数Ask()を呼び出します。
このためには、fragment2
にinterface
を作成する必要があります。以下のコードは、このドキュメントの例です。フラグメント内の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);
だから、MainActivity
にFragment2
のインスタンス値を持っています。だから、そこからのfragment2
の公の方法があります。それだ例えば
fragment2.doSomething();
。
[フラグメントからのアクティビティメソッドを呼び出す]の可能な複製(0120-17753-1) –
これは ' getActivity() 'を呼び出してMainActivityにキャストしますが、フラグメントとアクティビティを切り離すので、インターフェイスを使用する方が良いです。http://stackoverflow.com/a/31798511/4409409 –
インターフェイスを使用して、主な活動。 –