Android与Fragment交流活动

时间:2013-09-19 08:35:54

标签: android android-activity fragment communication

我不知道发生了什么,但我得到了一个例外,应用程序冻结了。

主要活动:

public class MainAcitivty extends FragmentActivity implements OnClickListener
{
    // ...

    public interface OnItemSelectedListener
    {
        public void onItemSelected(int resourceId);
    }

    OnItemSelectedListener mCallback;

    @Override
    public void onClick(View v)
    {
        if (v.getId() == R.id.my_imageView)
        {
            mCallback.onItemSelected(R.id.my_imageView);
        }
    }
}

片段:

public MyFragment extends Fragment implements MainAcitivty.OnItemSelectedListener
{
   @Override
   public void onItemSelected(int resourceId)
   {
       Log.i("INFO", "Selected: " + resourceId);
   }
}

如果我单击所选按钮,应用程序将冻结,并抛出以下异常:

  

E / AndroidRuntime(21649):致命异常:主

     

E / AndroidRuntime(21649):java.lang.NullPointerException

     

E / AndroidRuntime(21649):at   com.example.MainActivity.onClick(MainActivity.java:53)

     

E / AndroidRuntime(21649):at   android.view.View.performClick(View.java:4232)

     

E / AndroidRuntime(21649):at   android.view.View $ PerformClick.run(View.java:17298)

     

E / AndroidRuntime(21649):at   android.os.Handler.handleCallback(Handler.java:615)

     

E / AndroidRuntime(21649):at   android.os.Handler.dispatchMessage(Handler.java:92)

     

E / AndroidRuntime(21649):在android.os.Looper.loop(Looper.java:137)

     

E / AndroidRuntime(21649):at   android.app.ActivityThread.main(ActivityThread.java:4921)

     

E / AndroidRuntime(21649):at   java.lang.reflect.Method.invokeNative(Native Method)

     

E / AndroidRuntime(21649):at   java.lang.reflect.Method.invoke(Method.java:511)

     

E / AndroidRuntime(21649):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1027)

     

E / AndroidRuntime(21649):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

     

E / AndroidRuntime(21649):at dalvik.system.NativeStart.main(Native   方法)

2 个答案:

答案 0 :(得分:4)

MyActivity添加方法

    public void addListener(MainAcitivty.OnItemSelectedListener listener){
        mCallback = listener;
    }

并在onViewCreated()的{​​{1}}中调用此方法。
MyFragment

答案 1 :(得分:1)

我不知道53行是哪一行,但你的mCallback可能是空的。在解除引用之前检查一下。