2017-01-17 6 views
0

У меня есть пользовательский вид, который расширен с RelativeLayout.Пользовательское представление как singleton в Android

Я хотел попытаться сделать этот пользовательский вид в качестве одноэлементного.

У меня есть этот код:

private static CameraView sCameraView; 
public static synchronized CameraView getInstance(Context context) { 
    if (sCameraView == null) { 
     sCameraView = new CameraView(context); 
    } 
    return sCameraView; 
} 

И пытался использовать это из фрагмента, как:

private CameraView mCameraView = CameraView.getInstance(getActivity().getApplicationContext()); 

mCameraView = (CameraView) mView.findViewById(R.id.camera_preview); 

Я получаю NullPointException от этого кода. Тогда также InflateException, когда я немного переключаю вещи.

Как я мог бы обращаться к статическому экземпляру из пользовательского представления и назначить его переменной? потому что при этом:

CameraView.getInstance(getActivity().getApplicationContext()) = (CameraView) mView.findViewById(R.id.camera_preview); 

не допускается.

Любая помощь будет очень признательна.

+1

«Я хотел попытаться сделать этот пользовательский вид как одноэлементный» - вы будете утечки памяти (делая одноэлемент опасным), и представление не будет работать в других действиях (что делает одноэлементным бесполезным). Я настоятельно рекомендую вам придумать другой план. Помимо этого, используйте LogCat для проверки трассировки стека Java, связанной с вашими сбоями: https://stackoverflow.com/questions/23353173/unappro-myapp-has-stopped-how-can-i-solve-this Если вы не понимаете трассировку стека, отредактируйте свой вопрос и опубликуйте его. – CommonsWare

+0

Хорошо, спасибо за ваш ответ #CommonsWare. Я знал, что синглтон не был хорошим выбором, но я экспериментировал с одним сингл-представлением в андроиде. – JWL

ответ

0

частный статический CameraView sCameraView; является статической ссылкой, но это нежелательно. Read this

Вам следует избегать объявления элементов пользовательского интерфейса как статических. Надеюсь, это решает вашу проблему.

Смежные вопросы