我一直在片段的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
- }
- }