如何从主要活动中调用片段方法
Posted
技术标签:
【中文标题】如何从主要活动中调用片段方法【英文标题】:How to call fragment method from main activity 【发布时间】:2016-06-15 07:31:12 【问题描述】:我在片段类中有方法。我想从主要活动中调用该方法,但我不想使用 FragmentById(或)FragmentByTag。
我的片段方法:
public void setItemFromDrawer(String sourceTag, String destTag)
//dosomething
如何在不使用 FragmentById(或)FragmentByTag 的情况下从主 Activity 调用上述方法?
【问题讨论】:
当您使用 fragmentTransaction 保存片段对象加载片段时,您可以从该对象调用任何公共方法 我没看懂..你能给出任何示例代码 ***.com/questions/10903077/…的可能重复 【参考方案1】:首先创建一个接口
public interface MyInterface
void myAction() ;
你的片段必须实现这个接口。
public MyFragment extends Fragment implements MyInterface
在您的活动中,定义 MyInterface 类型的字段:
private MyInterface listener ;
public void setListener(MyInterface listener)
this.listener = listener ;
在创建片段并添加它时:
setListener(myFragment);
最后,当你想要调用 Fragment 方法的条件发生时,只需调用:
listener.myAction() ; // this will call the implementation in your MyFragment class.
【讨论】:
我总觉得接口有效且是最佳选择。这是我会推荐更多的答案。 简单的最佳答案!setListener(myFragment);
- 你在哪里设置的??????
创建片段并添加它时!在你的活动中。 @ekashking
如果我在 ViewPager 中添加呢?【参考方案2】:
这意味着你调用了一个片段方法
((YourFragmentClass) fragment).Yourmethod();
【讨论】:
【参考方案3】:为了更好地解释 user5466222 的答案:
YourFragmentClass fragment = new YourFragmentClass();
((YourFragmentClass) fragment).yourmethod();
【讨论】:
如果它就这么简单....但事实并非如此。Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
【参考方案4】:
在 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
在你想调用片段方法的地方使用下面一行
currentFragment.setItemFromDrawer("sourceTag","destTag");
【讨论】:
currentFragment = 片段;在这一行片段中是什么? 您正在加载的片段。你的函数在哪里实现【参考方案5】:((YourFragment Class) 片段).Your method();
它对我有用
【讨论】:
片段是什么意思?以上是关于如何从主要活动中调用片段方法的主要内容,如果未能解决你的问题,请参考以下文章