1

Aşağıdaki snippet, OpenCV4Android'in bir Activity, örn. this sample app içinde, ancak bir Fragment içinde yapmam gerekiyor (çünkü benim JavaCameraView benim bölümümde).Bir Parçanın İçinde, OpenCV4Android'i başlatmak için doğru yer nedir?

Sadece bu Activity yapmış gibi yapardı

, yani ben (herhangi bir yöntemin vücut dışında) sınıf gövdesine, ancak bu şekilde, başlatma kodu (aşağıdaki parçada 4 deyimi) içine doğrudan baseLoaderCallback ediyorum başlatmak istiyorum Fragment başlatılır başlatılmaz yürütülür. Gördüğümüz gibi

, BaseLoaderCallback yapıcı bir argüman olarak uygulama bağlamını alır ve ben onActivityCreated() önce getActivity()onActivityCreated() önce getActivity() boş dönebilirsiniz çünkü denir diyemezsin.

public class AnActivity extends Activity implements CvCameraViewListener2 { 
    ... 
    private JavaCameraView javaCameraView; 
    ... 

    private CameraBridgeViewBase cameraBridgeViewBase; 

    BaseLoaderCallback baseLoaderCallback = new BaseLoaderCallback(getActivity().getApplicationContext()) { 
     @Override 
     public void onManagerConnected(int status) { 
      switch (status) { 
      case LoaderCallbackInterface.SUCCESS: 
       cameraBridgeViewBase.enableView(); 
       break; 
      default: 
       super.onManagerConnected(status); 
       break; 
      } 
     } 
    }; 

    ... 

    //SOME LIFE CYCLE CALL BACK METHODS 

    @Override 
    public void onResume() { 
     super.onResume();  
     OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, getActivity().getApplicationContext(), 
       baseLoaderCallback); 
    } 
    ... 
} 

cevap

1

mı (yapıcı gövdesinden önce idam) sınıfı vücutta baseLoaderCallback başlatılıyor rağmen, geri arama en onManagerConnectedOpenCVLoader.initAsync tamamlanıncaya kadar, çok değil onResume kadar çağrılmaz.

Eğer gerçekten o zamana kadar buna ihtiyacı yoktur, çünkü o zaman sadece onResume yılında baseLoaderCallback için başlatıcı koymak getActivity() (o null dönecektir çünkü) onAttach önce arama önlemek istiyorsanız

.

+0

Evet ama 'getActivity()' bu noktada çağrılır (kurucudan önce) ve 'getActivity()' den önce çağrılmamalıdır 'onActivityCreated() '- _that_ problemdir. – Solace

+0

'getActivity()' burada aranıyor çünkü uygulama bağlamı burada gerekli. – Solace

+0

Ah, Cevabımı güncelledim. Eğer 'initAsync'de' onResume' ile arama yapmakta güçlük çekiyorsanız, o zaman sadece 'baseLoaderCallback' öğesini başlatın. – szym

İlgili konular