android – Fragment setuserVisibleHint为true但getActivity返回null

前端之家收集整理的这篇文章主要介绍了android – Fragment setuserVisibleHint为true但getActivity返回null前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在片段的setUserVisibleHint()方法中做一些逻辑.我一直在检查isVisibleToUser是否为true,然后使用getActivity返回活动.这一点运行良好(100%的时间),直到我将支持库更新到最新版本(支持:appcompat-v7:24.2.0).现在getActivity总是返回null.解释此行为的支持库是否有一些更改?
  1. @Override
  2. public void setUserVisibleHint(boolean isVisibleToUser) {
  3. super.setUserVisibleHint(false);
  4.  
  5. if (isVisibleToUser) {
  6. getActivity() <- null
  7. }

解决方法

我参加聚会有点晚了但也许这可以帮助别人.我通过在fragment类中创建一个布尔成员来解决这个问题.然后我使用它来确定我是否能够在setUserVisibleHint方法中成功获取活动.如果没有,我在onAttach中执行与活动相关的代码.见下文.
  1. public MyFragment extends Fragment {
  2.  
  3. ...
  4.  
  5. private boolean doInOnAttach = false;
  6.  
  7. @Override
  8. public void setUserVisibleHint(boolean visible) {
  9. super.setUserVisibleHint(visible);
  10. // if the fragment is visible
  11. if (true == visible) {
  12. // ... but the activity has not yet been initialized
  13. doInOnAttach = true;
  14. } else {
  15. myAction();
  16. }
  17. }
  18.  
  19. @Override
  20. public void onAttach(Context context) {
  21. super.onAttach(context);
  22. if (true == doInOnAttach) {
  23. myAction();
  24. doInOnAttach = false;
  25. }
  26. }
  27.  
  28. private void myAction() {
  29. // code to execute here
  30. }
  31. }

猜你在找的Android相关文章