2

我不知道发生了什么,但我遇到了一个异常并且应用程序冻结了。

主要活动:

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):在 com.example.MainActivity.onClick(MainActivity.java:53)

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

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

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

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

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

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

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

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

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

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

E/AndroidRuntime(21649): 在 dalvik.system.NativeStart.main(Native Method)

4

2 回答 2

4

MyActivity添加方法中

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

onViewCreated()并在中调用此方法MyFragment
((MyActivity) getActivity).addListener(this);

于 2013-09-19T08:45:41.567 回答
1

我不知道第 53 行是哪一行,但您mCallback的可能为空。在取消引用之前检查它。

于 2013-09-19T08:38:20.007 回答