#android #android-fragments
#Android #android-фрагменты
Вопрос:
эта ошибка, которую я получил, введите описание изображения здесь
public class ProfileFragment extends Fragment {
TextView profileNames,ProfileRegNumber;
String regnumber;
String Student_URL ="http://192.168.43.244/ULKandroid/student.php";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_profile,container,false);
//HomeActivity homeActivity = new HomeActivity();
profileNames = (TextView) v.findViewById(R.id.txtProfileNames);
ProfileRegNumber = (TextView) v.findViewById(R.id.txtProfileRegNo);
String n = this.getArguments().getString("names");
String r = this.getArguments().getString("reg");
profileNames.setText(n);
ProfileRegNumber.setText(r);
return v;
}
}
итак, я получаю ту же ошибку, которая выглядит так
11-08 11:54:12.604 4154-4154/cards.inkuge.com.ulkstudent E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: cards.inkuge.com.ulkstudent, PID: 4154 java.lang.Исключение NullPointerException в cards.inkuge.com.ulkstudent.Фрагменты.ProfileFragment.onCreateView(ProfileFragment.java: 46) в androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600) в androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java: 881) в androidx.fragment.app.FragmentManagerImpl. moveFragmentToExpectedState(FragmentManagerImpl.java:1238) в androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java: 1303) в androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java: 439) в androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java :2079) в androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java: 1869) в androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824 ) в androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727) в androidx.fragment.app.FragmentManagerImpl$2.выполнить(FragmentManagerImpl.java :150) на Android.os.Handler.handleCallback(Handler.java: 733) на android.os.Handler.DispatchMessage(Handler.java:95) на android.os.Looper.loop(Looper.java: 136) на android.app.ActivityThread.main(ActivityThread.java: 5017) на java.lang.reflect.Method.invokeNative (собственный метод) в java.lang.reflect.Method.invoke(Method.java: 515) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 779) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 595) в dalvik.system.NativeStart.main(роднойМетод)
- Элемент списка
и это действие, в котором задаются аргументы
else {
Intent intent = new Intent(LoginActivity.this,HomeActivity.class);
Bundle bundle = new Bundle();
bundle.putString("names",jsonObject.getString("student_names"));
bundle.putString("reg",jsonObject.getString("regnumber_student"));
ProfileFragment fragment = new ProfileFragment();
bundle.putString("names",jsonObject.getString("student_names"));
bundle.putString("reg",jsonObject.getString("regnumber_student"));
fragment.setArguments(bundle);
intent.putExtras(bundle);
startActivity(intent);
clear();
finish();
}
Комментарии:
1. Опубликуйте код, в котором вы передаете «имена» и «reg» фрагменту
Ответ №1:
Вы должны создать свой фрагмент примерно так:
public static ProfileFragment NewInstance(String names, String reg) {
ProfileFragment fragment = new ProfileFragment();
Bundle bundle = new Bundle();
bundle.putString("names", names);
bundle.putString("reg", reg);
fragment.setArguments(bundle);
return fragment;
}
Также убедитесь, что у вас есть такой конструктор
public ProfileFragment() {
// Required empty public constructor
}
Определите глобальные переменные в этом фрагменте следующим образом:
private String _names;
private String _reg;
Переопределите метод onCreate следующим образом:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getArguments() != null) {
_names= getArguments().getString("names");
_reg= getArguments().getString("reg");
}
}
затем в вашем методе OnCrateView задайте текст следующим образом:
profileNames.setText(_names);
ProfileRegNumber.setText(_reg);
И в Activity создайте фрагмент, подобный этому.
private void replaceFragmentInternal(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.enter_fragment, R.anim.exit_fragment);
fragmentManager.popBackStack();
fragmentTransaction
.addToBackStack(null)
.replace(R.id.frameLayoutHolder, fragment)
.commit();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
replaceFragmentInternal(ProfileFragment.NewInstance(names,reg));
}