2016-08-15 4 views
0

Я не совсем уверен, какой другой вид информации/кода я должен предоставить. Странная вещь в другом фрагменте и активности, этот почти идентичный код работает. Вот мой onViewCreated метод:Исключительное исключение указателя в представлении, полученном методом onViewCreated внутри фрагмента

Внутри фрагмента:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    mHelveticaTF = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Helvetica.otf"); 
    oopsTV = (TextView) view.findViewById(R.id.noClub_oops); // I've tried getView() and getActivity() - same result 
    oopsTV.setTypeface(mHelveticaTF); // Null pointer exception here. 
} 
@Override 
public void View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_no_club_membership, container, false); 
} 

Исключение нулевого указателя происходит при вызове setTypeface на oopsTV (что, по-видимому нуль). onCreateView, похоже, раздувает правильный .xml-файл. R.id.noClub_oops определенно находится в моем. XML-файле как TextView.

Это исключение нулевого указателя также встречается в onCreateView после того, как фрагмент завышен и перед возвратом представления (не используя getView(), а фактический указатель, например, View v).

В конце onCreate метода моей деятельности, я создать FragmentTransaction, чтобы показать мой фрагмент:

Внутри активность:

setContentView(R.layout.activity_create_club); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.CreateClubHolder, newClubFormFragment.newInstance()); 
ft.commit(); 

Вот мой fragment_no_club_membership.xml файл:

<LinearLayout xmlns:android="http://schemas.com/android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
... 
... 
<TextView 
     android:name="@+id/noClub_oops" 

Я устал чистить проект и снова бегать. Такое же исключение нулевого указателя.

Вот трассировки стека (отредактированный имя путь к папке для личной жизни):

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.TextView.setTypeface(android.graphics.Typeface)' on a null object reference 
    at com.myname.cs.createClub.NoClubMembershipFragment.onViewCreated(NoClubMembershipFragment.java:52) 

UPDATE:

я забыл включить код, где я также извлекла кнопку в методе onViewCreated:

public void onViewCreated(View view, Bundle savedInstanceState) { 
    mHelveticaTF = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Helvetica.otf"); 
    oopsTV = (TextView) view.findViewById(R.id.noClub_oops); // I've tried getView() and getActivity() - same result 
    oopsTV.setTypeface(mHelveticaTF); // Null pointer exception here. 
    // oopsTV.isActivated() crashes the program. 

    createClubButton = (Button) view.findViewById(R.id.noClub_create); 
    // createClubButton.isActivated() does NOT crash the program. Button is not null. 
} 

Я только что узнал, что кнопка не является нулевой, и я могу ее получить из findViewById. Когда я избавляюсь от вызовов, чтобы изменить Typeface, я не получаю исключений, и я могу видеть взгляды моего фрагмента на моем приложении, TextViews и все. Кажется, что TextViews раздуваются, но я не могу их восстановить. Когда я запускаю isActivated на этих TextViews, я получаю исключение с нулевым указателем.

Похоже, что проблема в том, что я не могу получить TextViews, несмотря на то, что они правильно раздуваются, но я могу получить другие компоненты, такие как кнопки.

+0

Какое имя xml вы упомянули выше? –

+0

fragment_no_club_membership.xml. Я отредактирую, чтобы отразить это. – Biiiiiird

+0

Просьба включить stacktrace –

ответ

0

Просьба использовать Контекст вместо getActivity(). Вы можете получить Контекст от родителя. Действия, как показано ниже в фрагменте.

private Context mContext; 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    mContext=context; 
} 

А также, если вам нужно экземпляр Activity в фрагменте, чем просто бросить контекст на активность ниже

Activity activity= (Activity) mContext;//If needed 

Подробнее о для хорошего качества кода, вы можете это стандарты.

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