2

我正在尝试获取FragmentStackSupportActivity 的上下文并在内部静态类中使用它。

我已经FragmentStackSupport在内部静态类中实例化,我正在使用getBaseContext()它来获取FragmentStackSupport.

将外部类上下文放入内部GCMRegistar.checkDevice(thisContext)不会在代码中产生错误,但会使应用程序崩溃。

我不能使用 'this' 或者FragmentStackSupport.this 因为内部类是 static。如果课程是公开的,“这个”会起作用......

如何为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);

}
}
}
4

2 回答 2

1

如果我理解正确并且您正在尝试获取 FSSContext,这应该可以

GCMRegistrar.checkDevice(CountingFragment.this.FSSContext);

您可以使用 OuterClassName.this 访问匿名内部类的周围类(而简单的“this”指的是内部类)

编辑:抱歉,我错过了这个问题的要点。根据 checkDevice 的文档,它旨在获取应用程序上下文 - 在您的崩溃示例中,您正在向它传递一个 Activity 上下文(它可能与相关的 Activity 一起被销毁)。请改用 Context.getApplicationContext()。另请注意,如果设备不支持 GCM,则 checkDevice 会引发 UnsupportedOperationException,因此该调用应位于 try/catch 块中。

于 2012-09-05T23:39:52.557 回答
0

我找到了答案,但是我不确定它为什么会起作用。但是因为我使用的是sherlock action bar,所以不得不使用那个库的具体方法

GCMRegistrar.checkDevice(getSherlockActivity().getApplicationContext());
于 2012-09-06T02:12:22.500 回答