如何从主要活动中调用片段方法

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();

它对我有用

【讨论】:

片段是什么意思?

以上是关于如何从主要活动中调用片段方法的主要内容,如果未能解决你的问题,请参考以下文章

从意图活动访问片段方法

从活动中调用片段事件

从片段中调用父母的活动

从片段调用活动方法

从片段内部调用活动方法[重复]

从片段中获取输入数据