【问题标题】:Android communicate Activity with FragmentAndroid Activity 与 Fragment 通信
【发布时间】:2013-09-19 08:35:53
【问题描述】:

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

主要活动:

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 方法)

【问题讨论】:

  • mCallback 未启动

标签: android android-activity fragment communication


【解决方案1】:

MyActivity添加方法

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 2021-07-18
      • 2012-10-12
      • 1970-01-01
      相关资源
      最近更新 更多