【问题标题】:Invoking a method from parent fragment从父片段调用方法
【发布时间】:2016-07-17 19:37:49
【问题描述】:

通常,我可以从Activity 调用扩展DialogFragment 并实现DialogInterface.OnClickListener() 的对象。

然后,如果我想从 Dialog 调用父活动中的方法,我可以执行 ((NameOfParentActivity)getActivity()).nameOfMethod();

但现在我从Fragment(特别是ViewPager 的页面)而不是Activity 调用这样的对象。

我不确定要更改什么才能使方法调用行正常工作。换句话说,我试图从 Fragment 类中调用一个方法,同时在其 DialogFragment 对象中。

编辑:OnClick() 代码来自我的Adapter 类:

public void onClick(View v) {
    DeleteGameBoardDialogFragment dialogFragment = new DeleteGameBoardDialogFragment();
    Bundle args = new Bundle();
    args.putString(TabFragmentGameBoard.GAMEBOARD_DIALOG_TAG, mGameBoards.get(position).getGameBoardName());
    dialogFragment.setArguments(args);
    dialogFragment.show(((Activity) mContext).getFragmentManager(), "");
}

【问题讨论】:

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


    【解决方案1】:

    您可以使用setTargetFragment()getParentFragment() 解决您的对话片段问题。

    从您的 ViewPager 片段 调用对话框,您希望在其中执行片段方法。

    DeleteGameBoardDialogFragment dialogFragment = new DeleteGameBoardDialogFragment();
    dialogFragment.setTargetFragment(this,1);
    FragmentTransaction transaction=getChildFragmentManager().beginTransaction();//must be getChildFragmentManager()
    dialogFragment.show(transaction, "df");
    

    在您的DeleteGameBoardDialogFragment 中,调用以下代码

    DeleteGameBoardDialogFragment  fragment=(DeleteGameBoardDialogFragment) getParentFragment();
    fragment.nameOfMethod()
    

    IMPT:确保您只从片段而不是从活动中调用对话框。 为什么如果您从活动getParentFragment() 调用返回null

    getParentFragment () :返回包含此 Fragment 的父 Fragment。如果这个Fragment直接附加到一个Activity,返回null..更多访问SO : getParentFragment returning null

    【讨论】:

    • 嗨@Bharatesh 在mainfragment 中调用setTargetFragment 后,当我调用它((MainFragment)getTargetFragment()).method(); 时它正在工作。这是一个好方法吗
    • @a2en 没问题.. 唯一的区别是我创建了一个对象并调用了一个方法,而您没有.. 但是它是您的调用方式。代码可读性很重要。
    • 但是你打电话给getParentFragment();而我打电话给getTargetFragment
    • 我错过了...请查看官方文档中getParentFragment()getTargetFragment() 之间的区别。因为这两种方法都依赖于实现子片段。
    【解决方案2】:

    根据我从您的问题中了解到的情况,您有一个ViewPager,当单击按钮时会打开一个对话框,并且您想从您的ViewPager Fragment 访问一个方法?

    如果这是您的问题,不妨尝试创建一个行为类似于ListenerInterface 并将其传递给DialogFragment。你的方法所在的Fragment 应该实现这个监听器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多