hik*_*koo 13 java android android-fragments android-activity fragmentmanager
我在片段类中有方法.我想从主要活动中调用该方法,但我不想使用FragmentById(或)FragmentByTag.
我的片段方法:
public void setItemFromDrawer(String sourceTag, String destTag) {
//dosomething
}
Run Code Online (Sandbox Code Playgroud)
如何在不使用FragmentById(或)FragmentByTag的情况下从主活动调用上述方法?
Far*_*ihi 31
首先创建一个接口
public interface MyInterface
{
void myAction() ;
}
Run Code Online (Sandbox Code Playgroud)
您的片段必须实现此接口.
public MyFragment extends Fragment implements MyInterface
Run Code Online (Sandbox Code Playgroud)
在您的活动中,定义MyInterface类型的字段:
private MyInterface listener ;
public void setListener(MyInterface listener)
{
this.listener = listener ;
}
Run Code Online (Sandbox Code Playgroud)
创建片段并添加片段时:
setListener(myFragment);
Run Code Online (Sandbox Code Playgroud)
最后,当你想要调用Fragment方法的condtion时,只需调用:
listener.myAction() ; // this will call the implementation in your MyFragment class.
Run Code Online (Sandbox Code Playgroud)
小智 6
为了更好地解释user5466222的答案:
YourFragmentClass fragment = new YourFragmentClass();
((YourFragmentClass) fragment).yourmethod();
Run Code Online (Sandbox Code Playgroud)
在 Activity 中,在加载片段时使用类似以下内容:
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
Run Code Online (Sandbox Code Playgroud)
在要调用片段方法的地方使用以下行
currentFragment.setItemFromDrawer("sourceTag","destTag");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26141 次 |
| 最近记录: |