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

答えは見つかりましたが、なぜ機能するのかわかりません。しかし、私はシャーロックアクションバーを使用しているため、そのライブラリの特定のメソッドを使用する必要がありました

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