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?
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);
}
...
}
Evet ama 'getActivity()' bu noktada çağrılır (kurucudan önce) ve 'getActivity()' den önce çağrılmamalıdır 'onActivityCreated() '- _that_ problemdir. – Solace
'getActivity()' burada aranıyor çünkü uygulama bağlamı burada gerekli. – Solace
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