如何从android中的Dialogfragment调用活动?

时间:2015-02-12 08:22:59

标签: android android-intent android-activity nullpointerexception android-dialogfragment

我想从Dialogfragment调用一个活动,我已经在下面附上了代码和logcat,供您参考我所尝试的内容。请向我提供您的知识。谢谢。

 Intent intent = new Intent(getActivity(), LinkActivity.class);
getActivity().startActivityForResult(intent, 0);

logcat的:

  

02-12 13:47:17.345:E / AndroidRuntime(670):致命异常:主要   02-12 13:47:17.345:E / AndroidRuntime(670):java.lang.NullPointerException   02-12 13:47:17.345:E / AndroidRuntime(670):在android.content.ComponentName。(ComponentName.java:75)   02-12 13:47:17.345:E / AndroidRuntime(670):在android.content.Intent。(Intent.java:3122)   02-12 13:47:17.345:E / AndroidRuntime(670):at com.firstadvantage.activities.LogDialog.LinkActivity(LogDialog.java:93)   02-12 13:47:17.345:E / AndroidRuntime(670):at com.firstadvantage.activities.LogDialog $ 3.onCommandFinished(LogDialog.java:75)   02-12 13:47:17.345:E / AndroidRuntime(670):at com.firstadvantage.buisnesslayer.commands.Command $ 3.run(Command.java:85)   02-12 13:47:17.345:E / AndroidRuntime(670):在android.os.Handler.handleCallback(Handler.java:605)   02-12 13:47:17.345:E / AndroidRuntime(670):在android.os.Handler.dispatchMessage(Handler.java:92)   02-12 13:47:17.345:E / AndroidRuntime(670):在android.os.Looper.loop(Looper.java:137)   02-12 13:47:17.345:E / AndroidRuntime(670):在android.app.ActivityThread.main(ActivityThread.java:4424)   02-12 13:47:17.345:E / AndroidRuntime(670):at java.lang.reflect.Method.invokeNative(Native Method)   02-12 13:47:17.345:E / AndroidRuntime(670):at java.lang.reflect.Method.invoke(Method.java:511)   02-12 13:47:17.345:E / AndroidRuntime(670):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)   02-12 13:47:17.345:E / AndroidRuntime(670):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)   02-12 13:47:17.345:E / AndroidRuntime(670):at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:2)

有两种方法可以从Fragment调用托管Fragment的Activity:

  1. 只需转换为HostActivity

    ((HostActivity) getActivity()).methodInActivity();
    
  2. 使用Fragment中的接口作为侦听器,HostActivity实现侦听器:

    private SuperListener hostActivity;
    
    //In Fragment, define interfce
    public interface SuperListener{
        //for example a confirm dialog
        void getDialogOk(View dialogView);
    }
    
    //in constructor, get listener instance from HostActivity
    public YourDialogFragment(SuperListener hostActivity)
    {
       this.hostActivity = hostActivity;
    }
    
    //when `Ok` clicked
    hostActivity.getDialogOk(dialogView);
    
  3. 希望这很清楚。