我正在尝试获取FragmentStackSupport
Activity的上下文,并在内部静态类中使用它。
我在内部静态类中实例化了FragmentStackSupport
,我使用getBaseContext()
来获取FragmentStackSupport
的上下文。
将外部类上下文放在GCMRegistar.checkDevice(thisContext)
中不会在代码中出错,但会导致应用程序崩溃。
我不能使用'this'或FragmentStackSupport.this
,因为内部类是静态的。如果这个课程是公开的,那么“这个”会有用......
如何为checkDevice()
方法获取正确的上下文?
public class FragmentStackSupport extends SherlockFragmentActivity {
int mStackLevel = 1;
//...
public static class CountingFragment extends SherlockFragment implements OnClickListener{
//...
FragmentStackSupport FSSContext;
static CountingFragment newInstance(int num) {
CountingFragment f = new CountingFragment();
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
FSSContext= new FragmentStackSupport();
FSSContext.getBaseContext();
Context thisContext;
//
// Make sure the device has the proper dependencies.
GCMRegistrar.checkDevice(thisContext);
}
}
}
答案 0 :(得分:1)
如果我理解正确并且您正在尝试获取FSSContext,那么这应该可以正常工作
GCMRegistrar.checkDevice(CountingFragment.this.FSSContext);
您可以使用OuterClassName.this访问匿名内部类的周围类(而简单的'this'指的是内部类)
编辑:道歉,我错过了这个问题的要点。根据checkDevice的文档,它打算采用应用程序上下文 - 在崩溃示例中,您将传递一个Activity上下文(可能会与相关活动一起销毁)。请改用Context.getApplicationContext()。另请注意,如果设备不支持GCM,checkDevice会抛出UnsupportedOperationException,因此该调用应该在try / catch块中。
答案 1 :(得分:0)
我找到了答案,但我不知道为什么会这样。但是因为我使用sherlock动作栏必须使用该库的特定方法
GCMRegistrar.checkDevice(getSherlockActivity().getApplicationContext());