我一直在片段的setUserVisibleHint()方法中做一些逻辑.我一直在检查isVisibleToUser是否为true,然后使用getActivity返回活动.这一点运行良好(100%的时间),直到我将支持库更新到最新版本(支持:appcompat-v7:24.2.0).现在getActivity总是返回null.解释此行为的支持库是否有一些更改?
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(false); if (isVisibleToUser) { getActivity() <- null }
解决方法
我参加聚会有点晚了但也许这可以帮助别人.我通过在fragment类中创建一个布尔成员来解决这个问题.然后我使用它来确定我是否能够在setUserVisibleHint方法中成功获取活动.如果没有,我在onAttach中执行与活动相关的代码.见下文.
public MyFragment extends Fragment { ... private boolean doInOnAttach = false; @Override public void setUserVisibleHint(boolean visible) { super.setUserVisibleHint(visible); // if the fragment is visible if (true == visible) { // ... but the activity has not yet been initialized doInOnAttach = true; } else { myAction(); } } @Override public void onAttach(Context context) { super.onAttach(context); if (true == doInOnAttach) { myAction(); doInOnAttach = false; } } private void myAction() { // code to execute here } }