【发布时间】:2014-01-17 08:23:34
【问题描述】:
我的代码在大多数情况下都能正常工作,但有时我的抖动监听器中的 getActivity() 为空。我确定该片段已附加到活动,因为我在震动发生之前对其 UI 执行了其他一些更新。此外,我将侦听器附加到 onActivityCreated 方法中,以确保创建活动并附加片段。
@Override
public void onActivityCreated (Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
ShakeListener mShaker = new ShakeListener(getActivity());
mShaker.setOnShakeListener(new ShakeListener.OnShakeListener () {
public void onShake()
{
ImageView next_App = (ImageView)getActivity().findViewById(R.id.next_app);
Animation next_move = AnimationUtils.loadAnimation(getActivity(), R.anim.next);
next_App.startAnimation(next_move);
}
});
}
我无法弄清楚这个问题,也回答了许多其他问题,因此感谢您的帮助。 谢谢
【问题讨论】:
-
您在扩展哪个类,在什么设备上遇到此问题?
-
getActivity().findViewById 是否返回 null??
-
通常,片段会从活动中分离出来。在使用
getActivity()之前使用isAdded()添加检查 -
顺便说一句,您可能应该将 next_App 和 next_move 作为您的类的成员变量,当您创建活动时,它们就会膨胀,而不是每次在 onShake 上。它应该使动画以更少的延迟开始,因为您不会每次都浪费时间膨胀和加载资源。
-
@blackbelt 片段扩展了 SherlockFragment,问题发生在 2.3 设备上,但在 4.* 设备上工作正常。