如何将类的上下文转换为内部静态类

时间:2012-09-05 23:34:10

标签: android static google-cloud-messaging inner-classes android-context

我正在尝试获取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);

}
}
}

2 个答案:

答案 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());