Java 如何对活动片段调用方法?

Java 如何对活动片段调用方法?,java,android,android-activity,fragment,Java,Android,Android Activity,Fragment,片段调用的活动方法如下: MyActivity method = (MyActivity) getActivity (); method.MyMethod ("string"); public void MyMethod (String var) {         Toast.makeText (MyActivity.this,                  var,Toast.LENGTH_SHORT).show(); } 以下是它在活动中的外观:

片段调用的活动方法如下:

MyActivity method = (MyActivity) getActivity (); 
method.MyMethod ("string");
public void MyMethod (String var) 
{         
    Toast.makeText (MyActivity.this,                  
        var,Toast.LENGTH_SHORT).show(); 
} 
以下是它在活动中的外观:

MyActivity method = (MyActivity) getActivity (); 
method.MyMethod ("string");
public void MyMethod (String var) 
{         
    Toast.makeText (MyActivity.this,                  
        var,Toast.LENGTH_SHORT).show(); 
} 

问题。如何对活动片段调用方法?(即,反向)

您需要实例化片段(获取片段的实例),然后调用该方法。

使用活动的FragmentManager获取片段的活动实例,然后像往常一样继续

例如:

MyFragment.java:

public void FragmentMethod() {
    doSomethingInFragment();
}
Activity.java:

public void onCreate() {
    FragmentManager fragManager = getSupportFragmentManager();
    MyFragment fragment = (MyFragment)fragManager.getFragments().get(0);
    fragment.FragmentMethod();
}

您会注意到,我使用
getFragments().get(0)
检索了片段的实例,它引用了FragmentManager后堆栈中的第一个片段。如果您只有一个片段,这是可以的,否则您可以使用
getFragment(Bundle,String)
方法。

如果我理解正确,为什么不在fragment中创建public方法并调用它呢?

public class MyFragment extends Fragment{
...
       public void myMethod (String var){         
             Toast.makeText (getActivity(),var,Toast.LENGTH_SHORT).show(); 
       } 
}
在你的活动中:

MyFragment fragment = new MyFragment();
...
getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.content_frame_layout, fragment);
fragment.myMethod("your string");

重复?如果您使用的是v4支持库,请尝试调用getSupportFragmentManager()而不是ReadOK,这意味着您使用的是来自常规API的片段。我强烈建议使用v4片段,因为它们受到更多设备的支持。获取android-support-v4.jar库文件,将其放在libs目录中,并将所有片段引用从android.app替换为android.support.v4.app。这通常是推荐的,也将使解决方案能够工作:)我使用SectionsPagerAdapter。当您选择创建片段的特定部分时:returnnewloadobjects();但如果我这样做:LoadObjects frag=newloadobjects();FragmentTransaction=getFragmentManager()。BeginTransaction();transaction.add(R.id.fragment_容器,frag,“listFragment”);transaction.commit();返回碎片;应用程序关闭了您在libs文件夹中有android-support-v4.jar吗?如果没有,您需要下载它并将其放入libs文件夹中。尝试使用android SDK管理器下载最新的android-support-v4.jar,然后从
/extras/android/support/v4/android-support-v4.jar