【问题标题】:Android - call MainActivity method from Fragment on the second attempt crashes appAndroid - 在第二次尝试崩溃应用程序时从 Fragment 调用 MainActivity 方法
【发布时间】:2017-04-29 05:16:26
【问题描述】:

这是我用来从 Fragment 页面触发 MainActvity.java 方法的内容:

((MainActivity) getActivity()).openGallery();   

一旦我在打开应用后第一次在片段页面中滑动,并执行此代码,它就可以工作了。但是,当我隐藏该片段页面,然后将其带回并再次执行该代码时,应用程序崩溃,并显示如下内容:

 Attempt to invoke virtual method 'void com.test.test7.MainActivity.openGallery()' on a null object reference

我找到的答案都没有涵盖这个问题,当它第一次工作和第二次崩溃时。

感谢任何帮助。

【问题讨论】:

标签: android fragment main-activity


【解决方案1】:

试试这个。

if(getActivity()!=null){    
  ((MainActivity) getActivity()).openGallery(); 
}

【讨论】:

  • 嗯。有用!!!!! ....但是,....我看不出逻辑。这不像我在两者之间的任何地方都让 getActivity() 不为空。它只是调节它是否为空。然后,如果它为空怎么办?
  • 您可以尝试将getinstance方法放入Mainactivity并调用吗?
【解决方案2】:

尝试使用该片段的上下文并执行类似的操作

 ((MainActivity) mContext).openGallery();   

【讨论】:

    【解决方案3】:

    您可以参考“处理片段生命周期”部分下的documentation。基本上在您的代码中某处调用((MainActivity) getActivity()).openGallery(),而片段未附加到活动,因此父上下文返回null。

    您不应假设活动上下文始终可用,因为片段通常会被分离并再次重新附加。你应该

    • (如果您需要上下文)仅在保证附加片段的方法中调用getContext()(参见上一个关于可用片段回调的链接),或

    • 在使用前始终执行条件检查以确保(MainActivity) getActivity() 不为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2020-11-29
      • 2018-08-23
      • 1970-01-01
      相关资源
      最近更新 更多