[英]How to call fragment method from main activity
I have method in fragment class. 我在片段类中有方法。 I want to call that method from main activity but I don't want to use FragmentById (or) FragmentByTag. 我想从主要活动中调用该方法,但我不想使用FragmentById(或)FragmentByTag。
My fragment method: 我的片段方法:
public void setItemFromDrawer(String sourceTag, String destTag) {
//dosomething
}
How to call above method from main activity without using FragmentById (or) FragmentByTag? 如何在不使用FragmentById(或)FragmentByTag的情况下从主要活动中调用上述方法?
First create an interface 首先创建一个界面
public interface MyInterface
{
void myAction() ;
}
Your fragment must implement this interface. 您的片段必须实现此接口。
public MyFragment extends Fragment implements MyInterface
In your activity, define a field of type MyInterface : 在您的活动中, 定义一个MyInterface类型的字段 :
private MyInterface listener ;
public void setListener(MyInterface listener)
{
this.listener = listener ;
}
When creating your fragment and adding it : 创建片段并将其添加时:
setListener(myFragment);
Finally, when the condtion happens that you want to call the Fragment method, just call : 最后,当您想调用Fragment方法的情况发生时,只需调用:
listener.myAction() ; // this will call the implementation in your MyFragment class.
这意味着您调用片段方法
((YourFragmentClass) fragment).Yourmethod();
To better explain the answer by user5466222 : 为了更好地解释user5466222的答案:
YourFragmentClass fragment = new YourFragmentClass();
((YourFragmentClass) fragment).yourmethod();
In Activity use something like this where you load your fragment: 在“活动”中,使用类似以下内容的方式加载片段:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(container, fragment);
transaction.addToBackStack(null); // if you want to store transaction
transaction.commit();
currentFragment = fragment; // currentFragment is global Fragment variable
Use following line where you want to call fragment's method 在要调用片段方法的地方使用以下行
currentFragment.setItemFromDrawer("sourceTag","destTag");
((YourFragment Class) fragment).Your method(); (((YourFragment类)片段)。您的method();
its worked form me 它的工作形式是我
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.