通常,从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(), "");
}
答案 0 :(得分:3)
您可以使用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。如果此片段直接附加到活动,则返回null ..更多访问SO : getParentFragment returning null
答案 1 :(得分:0)
根据我对您的问题的理解,您有一个ViewPager
,在点击按钮时会打开一个对话框,并且您想要从ViewPager Fragment
访问某个方法?
如果这是您的问题,请尝试制作行为与Interface
相似的Listener
并将其传递给DialogFragment
。您的方法所在的Fragment
应该实现此侦听器。