Как установить значение TextView во фрагменте? - PullRequest
0 голосов
/ 29 сентября 2018

Я использую фрагменты в моем динамическом приложении, где файл User.java содержит значения, а файл TabbedActivity.java содержит три фрагмента.Я хочу установить текст на TextView в ProfileFrgament.java.Итак, я создал TextView в fragment_profile.xml и сослался на него из TabbedActivity.java файла со следующим кодом

    name = findViewById(R.id.name);
    //getting the current user
    User user = SharedPrefManager.getInstance(this).getUser();
    //setting values to textviews
    name.setText(user.getUsername());

. Он не показывает никаких ошибок компиляции, но после открытия TabbedActivity.java приложениеостанавливается с NullPointerException в строке name.setText(user.getUsername()); Как решить эту проблему?

Это код ProfileFragment.java file

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

    name = getActivity().findViewById(R.id.name);
    //getting the current user
    User user = SharedPrefManager.getInstance(getActivity()).getUser();
    //setting values to textviews
    name.setText(user.getUsername());

    return inflater.inflate(R.layout.fragment_profile, container, false);
}

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Вам нужно сделать это в java-файле фрагмента, чем в java-файле упражнения.Теперь для поиска по фрагменту.Замените этот код:

name = findViewById(R.id.name);

на:

name = getActivity().findViewById(R.id.name);

Остальная часть кода может быть написана как она есть.

Также поместите этот тип операции в onViewCreated метод.Ввод этого кода в onCreateView может привести к сбою приложения.

0 голосов
/ 29 сентября 2018

Ваш TextView находится в fragment_profile.xml, и вы пытаетесь найти, что TextView в TabbedActivity.java, поэтому NullPointerException произошло

Введите этот код в ProfileFrgament.java

Измените свой код с этим

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) 
{ 
    final View rootView = inflater.inflate(R.layout.fragment_profile, container, false);
    name = (TextView) rootView.findViewById(R.id.name);
    User user = SharedPrefManager.getInstance(getActivity()).getUser(); 
    name.setText(user.getUsername()); 

    return rootView;
}
...