0

В настоящее время я создаю spinner со списком шрифтов, как показано ниже.Android Spinner Array Adapter Null Pointer Exception

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_custom_style_dialog, container, false); 

    mSpinnerFont = (Spinner) getActivity().findViewById(R.id.spinnerFont); 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_spinner_item, 
      new String[] {"System Font", "Helvetica", "Helvetica-Neue", "Impact"}); 
    arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    mSpinnerFont.setAdapter(arrayAdapter); 

    return view; 
} 

Однако, он выбрасывает исключение нулевого указателя на последней строке. Я не понимаю, как массив имеет нулевое значение. Спасибо за ваши ответы.

Spinner XML Ниже

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.richluick.blocnotes.CustomStyleDialogFragment"> 


    <Spinner 
     android:id="@+id/spinnerFont" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</FrameLayout> 
+1

возможно mSpinnerFont null! проверить идентификатор «R.id.spinnerFont» это то же самое, что и ваш xml-файл? – Rami

+0

Я разместил XML выше. То же самое для меня –

+0

Проверьте, не является ли ваш mSpinnerFont пустым, отлаживая или записывая его значение на консоль. Если это так, у вас может быть проблема с идентификатором для отслеживания. – NSouth

ответ

2

Эта линия:

getActivity().findViewById(R.id.spinnerFont); 

ищет вид из корня зрения, связанного с активностью (устанавливается Activity.setCurrentView()) , в то время как ваш счетчик находится внутри представления, которое вы только что запустили из файла (оно еще не помещено в иерархию представления активности). Закрепите свой код до:

view.findViewById(R.id.spinnerFont); 
-1

1) я удалил

xmlns:tools="http://schemas.android.com/tools" 

и

tools:context="com.richluick.blocnotes.CustomStyleDialogFragment" 

и я тестировал код, он отлично работает! я предполагаю, что проблема на

xmlns:tools="http://schemas.android.com/tools" 

попытки изменить его

xmlns:tools="http://schemas.android.com/apk/res-auto" 

2) Если проблема не устранена, возможно, ваш FrameLayout не входит в виду деятельности. Так

getActivity().findViewById(R.id.spinnerFont); 

всегда будет возвращать Null

+0

# 1 все еще не работал для меня. Как я могу быть уверенным, что FrameLayout включен? –

+0

добавьте идентификатор к вашему фрейму (в xml) и вызовите getActivity(). FindViewById (R.id.YOUR_ID), чтобы получить представление в коде – Rami