2016-06-20 31 views
1

这个下面的类是我的自定义对话框来显示和隐藏对话框,在这个类我重写onDismiss DialogFragment隐藏对话框,但在实现了,不能听那个简单的片段,为例如,这是我的自定义对话框:Android监听器onDismiss不工作片段

public class RobotDialog extends DialogFragment { 

    @Bind(R.id.robot_dialog_icon) 
    ImageView robot_dialog_icon; 

    @Bind(R.id.frame) 
    RelativeLayout frame; 

    public RobotDialog() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0)); 
     View view = inflater.inflate(R.layout.fragment_robot_dialog, container, false); 
     ButterKnife.bind(this, view); 
     return view; 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Window      window  = getDialog().getWindow(); 
     WindowManager.LayoutParams windowParams = window.getAttributes(); 
     windowParams.dimAmount = 0.0f; 
     window.setAttributes(windowParams); 
    } 

    @Override 
    public void onDismiss(final DialogInterface dialog) { 
     super.onDismiss(dialog); 
     final Activity activity = getActivity(); 
     if (activity != null && activity instanceof DialogInterface.OnDismissListener) { 
      ((DialogInterface.OnDismissListener) activity).onDismiss(dialog); 
     } 
    } 

    @Override 
    public void onActivityCreated(Bundle arg0) { 
     super.onActivityCreated(arg0); 
     getDialog().getWindow() 
       .getAttributes().windowAnimations = R.style.DialogAnimation; 
    } 
} 

,这是我简单的片段显示,必须听取onDismiss对关闭对话框:

public class FragmentRobotAssisstant extends Fragment implements DialogInterface.OnDismissListener { 

    private TextView icon_arrow_right; 
    private TextView activity_robot_title; 
    private TextView icon_send_message_to_robot; 

    private EditText user_chat_with_robot; 

    private List<Message> mMessages = new ArrayList<Message>(); 

    private RecyclerView   mMessagesView; 
    private RecyclerView.Adapter mAdapter; 

    private  CircularRevealView revealView; 
    private  android.os.Handler handler; 
    private  RobotDialog   robotDialog; 
    private  TextView   icon_show_robot_helper; 
    private  Context    context; 
    private  int     backgroundColor; 
    public static OnCloseSlidingLayer onCloseSlidingLayer; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activity_market_robot, container, false); 

     context = getActivity().getBaseContext(); 

     //@formatter:off 
     activity_robot_title  = (TextView)   view.findViewById(R.id.activity_market_robot_title); 
     icon_send_message_to_robot = (TextView)   view.findViewById(R.id.icon_send_message_to_robot); 
     icon_arrow_right   = (TextView)   view.findViewById(R.id.icon_arrow_right); 
     icon_show_robot_helper  = (TextView)   view.findViewById(R.id.icon_show_robot_helper); 
     user_chat_with_robot  = (EditText)   view.findViewById(R.id.user_chat_with_robot); 
     mMessagesView    = (RecyclerView)  view.findViewById(R.id.messages); 
     revealView     = (CircularRevealView) view.findViewById(R.id.reveal); 
     //@formatter:on 

     ... 

     return view; 
    } 

    @Override 
    public void onDismiss(final DialogInterface dialog) { 
     Log.e("DISMISS", " CLICKED"); 
    } 

    public interface OnCloseSlidingLayer { 
     void onClose(); 
    } 

    public static void setOnCloseSlidingLayer(OnCloseSlidingLayer l) { 
     onCloseSlidingLayer = l; 
    } 
} 

onDismiss从片段做工精细的任何活动,但它的确如此在这个片段NT上工作杰斯的评论

+0

尝试移动super.onDismiss(对话)的方法,而不是开始的结束 - 看看是否改变任何东西。 –

+0

@ jt-gilkeson does not work sir –

+1

片段不是活动,所以在对话框中调用getActivity不应返回您的FragmentRobotAssisstant片段。你确定片段的父活动实现了OnDismissListener吗? –

回答

0

大厦,在RobotoDialog:

@Override 
public void onDismiss(final DialogInterface dialog) { 
    final Fragment parent = getParentFragment(); 
    if (parent != null && parent instanceof DialogInterface.OnDismissListener) {    
     ((DialogInterface.OnDismissListener) parent).onDismiss(dialog); 
    } 
    super.onDismiss(dialog); 
} 
+0

不适用于我的代码 –

+1

您使用什么上下文来显示对话框? FragmentRobotAssisstant与getFragmentManager()?或父母的活动?如果您希望能够处理FragmentRobotAssisstant中的onDismiss,则必须使用getFragmentManager上下文显示RobotFragment,而不是活动的上下文。 –