Введение
Привет, ребята, я работаю над приложением в форме вопроса и долгое время застреваю на той же ошибке. Я уже проверил много вопросов StackOverFlow по этой теме, но не смог найти решения, применимого к моей проблеме.
Задача
После добавления формы появятся 6 слайдов в окне просмотра, каждый из которых содержит один вопрос (EditText). После заполнения вопросов элементы сохраняются. Если затем я открою форму, я смогу просмотреть все свои сохраненные данные, которые я поместил в эти EditTexts. К сожалению, попытка изменить их приводит к ошибке ссылки на нулевой объект в getText внутри моего String getTitle из моих фрагментов (за исключением Frag1 и Frag2).
Вопрос
Понятия не имею, что идет не так, сохранение не проблема, просмотр сохраненных данных не проблема. Но изменение любого другого фрагмента, кроме Frag1 или Frag2, приводит к ошибке нулевого объекта относительно String getTitle ... Надеюсь, кто-то знает, что идет не так. Может быть, это как-то связано с тем, что сохраненные данные не преобразуются в новые и т. Д.?
Коды
public class Frag4 extends Fragment {
private static final String EXTRA_TEXT = "text";
private EditText mEtVraag4;
public static Frag4 newInstance(String message) {
Bundle args = new Bundle();
args.putString(EXTRA_TEXT, message);
Frag4 fragment = new Frag4();
fragment.setArguments(args);
return fragment;
}
public Frag4 () {
}
public String getTitle(){
return mEtVraag4.getText().toString();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag4_layout, container, false);
mEtVraag4 = (EditText) view.findViewById(R.id.note_et_title4);
Bundle bundle = getArguments();
if (bundle != null) {
mEtVraag4.setText(bundle.getString(EXTRA_TEXT));
}
return view;
}
1024 *
*
Соответствующие части в моей деятельности
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
myDialog1 = new Dialog(this);
String mtitle = "";
String mquestion2 = "";
String mquestion4 = "";
String mquestion5 = "";
String mquestion6 = "";
String mquestion7 = "";
mNoteFileName = getIntent().getStringExtra("NOTE_FILE");
if(mNoteFileName !=null && !mNoteFileName.isEmpty()) {
mLoadedNote = Utilities.getNoteByName(this, mNoteFileName);
if(mLoadedNote !=null) {
mtitle = mLoadedNote.getTitle();
mquestion2 = mLoadedNote.getVraag2();
mquestion4 = mLoadedNote.getVraag4();
mquestion5 = mLoadedNote.getVraag5();
mquestion6 = mLoadedNote.getVraag6();
mquestion7 = mLoadedNote.getVraag7();
}
}
List<Fragment> fragments = new ArrayList<>();
fragments.add(Frag1.newInstance(mtitle));
fragments.add(Frag2.newInstance(mquestion2));
fragments.add(Frag4.newInstance(mquestion4));
fragments.add(Frag5.newInstance(mquestion5));
fragments.add(Frag6.newInstance(mquestion6));
fragments.add(Frag7.newInstance(mquestion7));
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(),fragments);
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
}
private void saveNote() {
String title1="",title2="", title4="",title5="",title6="", title7="";
for(int position = 0; position<mSectionsPagerAdapter.getCount();position++){
Fragment fragment = mSectionsPagerAdapter.getItem(position);
if(fragment instanceof Frag1){
title1 = ((Frag1)fragment).getTitle();
} else if(fragment instanceof Frag2){
title2 = ((Frag2)fragment).getTitle();
} else if(fragment instanceof Frag4){
title4 = ((Frag4)fragment).getTitle();
} else if(fragment instanceof Frag5){
title5 = ((Frag5)fragment).getTitle();
} else if(fragment instanceof Frag6){
title6 = ((Frag6)fragment).getTitle();
} else if(fragment instanceof Frag7){
title7 = ((Frag7)fragment).getTitle();
}
}
boolean valid = !TextUtils.isEmpty(title1);
Ideas note;
if(!valid){
Toast.makeText(this, "Please provide inputs", Toast.LENGTH_SHORT).show();
return;
}
note = new Ideas((mLoadedNote != null)?mLoadedNote.getDateTime():System.currentTimeMillis(), title1, title2, title4, title5, title6, title7);
if (Utilities.saveNote(this, note)){
Toast.makeText(this, "saved", Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(this, "not enough space", Toast.LENGTH_SHORT).show();
}
finish();
}