在应用程序还原时在片段中设置侦听器实例

baj*_*sko 4 android listener android-fragments

我创建了ErrorDialogFragment,其中包含OnDialogClickListener参数.

需要显示ErrorDialogFragment的每个其他片段或活动都通过ErrorDialogFragment中的公共方法设置OnDialogClickListener.同时,所有这些活动和片段都实现了OnDialogClickListener.

如果用户在显示ErrorDialogFragment时从应用程序退出,则会出现问题,并在一段时间后返回(应用程序从内存中删除).如果用户单击片段选项,它将强制关闭,因为未设置OnDialogClickListener.

我错误地使用了activity-listener-fragment模式,我如何解决这个问题(应用程序已经处于测试阶段..大模式更改是不可接受的.

例如:

接口:

public interface OnDialogClickListener {
    public void OnPositiveClick(int key, Object... args);
    public void OnNegativeClick(int key, Object... args);
}
Run Code Online (Sandbox Code Playgroud)

活动:

public class Home extends FragmentActivity implements TabListener, ServiceConnection, OnDialogClickListener {
    .
    .
    .
@Override
public void OnPositiveClick(int key, Object... args) {
    //some actions
}

@Override
public void OnNegativeClick(int key, Object... args) {
    //some actions
}
Run Code Online (Sandbox Code Playgroud)

分段:

public class ErrorDialogFragment extends DialogFragment implements OnClickListener {

OnDialogClickListener OnDialogClickListener = null;

    .
    .
    .

public void setDialogListener(OnDialogClickListener listener)
{   
    OnDialogClickListener = listener;
}

@Override
public void onClick(DialogInterface dialog, int which) {    
    if(OnDialogClickListener != null){
        switch (which) {
            case DialogInterface.BUTTON_POSITIVE:
                this.dismiss();
                OnDialogClickListener.OnPositiveClick(KEY, args);
                break;
            default:
                this.dismiss();
                OnDialogClickListener.OnNegativeClick(KEY, args);
                break;
        }
    }
    else
        this.dismiss();
}    
Run Code Online (Sandbox Code Playgroud)

Chr*_*sco 8

你最好在DialogFragment#onAttach(Activity)回调中设置它,如下所示:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    try { 
        mOnDialogClickListener = (OnDialogClickListener) activity;
    } catch(ClassCastException e) {
        throw new ClassCastException(activity.toString() + "must implement" + OnDialogClickListener.class.getSimpleName());
    }
}

@Override
public void onDetach() {
    super.onDetach()
    mOnDialogClickListener = null;
}
Run Code Online (Sandbox Code Playgroud)

最后,显然,制作你的Activity工具OnDialogClickListener