【问题标题】: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 保存片段对象加载片段时,您可以从该对象调用任何公共方法
  • 我没看懂..你能给出任何示例代码

标签: java android android-fragments android-activity fragmentmanager


【解决方案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();

    它对我有用

    【讨论】:

    • 片段是什么意思?
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2021-12-23
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多