Der Fehler ist: ‚VOID android.widget.TableRow.setVisibility (int)‘ auf einer Null-ObjektreferenzNull Objektreferenz zwischen zwei Aktivitäten mit mehreren Fragmenten
sehr neu in Android Studio und Java und hat gearbeitet damit für ein paar Wochen. Grundsätzlich besteht das Problem darin, dass ich mehrere Aktivitäten mit jeweils mehreren Fragmenten habe. Einer von ihnen namens Calculator hat drei Fragmente und in fragemntCalc2 habe ich viele Tabellenzeilen, die ich über ein Drop-Down-Menü aus einem anderen Aktivitätsfragment, nämlich einem Profil und seinem zweiten Fragment, unsichtbar machen möchte.
public class Fragment2 extends Fragment {
Context context;
Spinner CourseNameSpinner1;
Spinner QualificationSpinner1;
Spinner ExamboardSpinner1;
Spinner spinner_switch;
public static Fragment2 newInstance()
{
Fragment2 fragment = new Fragment2();
return fragment;
}
public Fragment2() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_profile2, container, false);
context = container.getContext();
CourseNameSpinner1 = (Spinner) rootView.findViewById(R.id.CourseNameSpinner1);
QualificationSpinner1 = (Spinner) rootView.findViewById(R.id.QualificationSpinner1);
ExamboardSpinner1 = (Spinner) rootView.findViewById(R.id.ExamboardSpinner1);
spinner_switch = (Spinner) rootView.findViewById(R.id.spinner_switch);
//Course Dropdown
Spinner spinner2 = (Spinner) rootView.findViewById(R.id.CourseNameSpinner1);
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(context, R.array.Course_Array, android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Specify the layout to use when the list of choices appears
spinner2.setAdapter(adapter2); // Apply the adapter to the spinner
//Qualification Dropdown
Spinner spinner3 = (Spinner) rootView.findViewById(R.id.QualificationSpinner1);
ArrayAdapter<CharSequence> adapter3 = ArrayAdapter.createFromResource(context, R.array.Qualification_Array, android.R.layout.simple_spinner_item);
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Specify the layout to use when the list of choices appears
spinner3.setAdapter(adapter3); // Apply the adapter to the spinner
//ExamBoard Dropdown
Spinner spinner4 = (Spinner) rootView.findViewById(R.id.ExamboardSpinner1);
ArrayAdapter<CharSequence> adapter4 = ArrayAdapter.createFromResource(context, R.array.Exam_Array, android.R.layout.simple_spinner_item);
adapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Specify the layout to use when the list of choices appears
spinner4.setAdapter(adapter4); // Apply the adapter to the spinner
Spinner spinner23 = (Spinner) rootView.findViewById(R.id.spinner_switch);
ArrayAdapter<CharSequence> adapter23 = ArrayAdapter.createFromResource(context, R.array.Switch_Array, android.R.layout.simple_spinner_item);
adapter23.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Specify the layout to use when the list of choices appears
spinner23.setAdapter(adapter23); // Apply the adapter to the spinner
//ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(context, R.array.Course_Array, android.R.layout.simple_spinner_item);
//Where context is, originally it was a this.
//Changed as the spinner isn't declared in main activity
//this is fragment java, therefore it needs context to declare the spinner
SharedPreferences sharedPref = context.getSharedPreferences("Units", context.MODE_PRIVATE);
int spinnerValue = sharedPref.getInt("UserCourseChoiceSpinner1", -1);
int spinnerValue2 = sharedPref.getInt("UserCourseChoiceSpinner2",-1);
int spinnerValue3 = sharedPref.getInt("UserCourseChoiceSpinner3",-1);
if(spinnerValue != -1)
CourseNameSpinner1.setSelection(spinnerValue);
QualificationSpinner1.setSelection(spinnerValue2);
ExamboardSpinner1.setSelection(spinnerValue3);
Button button = (Button) rootView.findViewById(R.id.button_savecourse);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
int userChoice = CourseNameSpinner1.getSelectedItemPosition();
int userChoice2 = QualificationSpinner1.getSelectedItemPosition();
int userChoice3 = ExamboardSpinner1.getSelectedItemPosition();
SharedPreferences sharedPref = context.getSharedPreferences("Units", Context.MODE_PRIVATE);
SharedPreferences.Editor prefEditor = sharedPref.edit();
prefEditor.putInt("UserCourseChoiceSpinner1",userChoice);
prefEditor.putInt("UserCourseChoiceSpinner2",userChoice2);
prefEditor.putInt("UserCourseChoiceSpinner3",userChoice3);
prefEditor.commit();
Toast.makeText(context, "Data was saved successfully", Toast.LENGTH_LONG).show();
}
});
Spinner spinner_switch = (Spinner)rootView.findViewById(R.id.spinner_switch);
spinner_switch.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
TableRow tableRow;
if (position != 1)
{
tableRow = (TableRow) getActivity().findViewById(R.id.table13);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.table14);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.table15);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.table16);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.table17);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.table18);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade13);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade14);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade15);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade16);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade17);
tableRow.setVisibility(View.GONE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade18);
tableRow.setVisibility(View.GONE);
}
else
{
tableRow = (TableRow) getActivity().findViewById(R.id.table13);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.table14);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.table15);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.table16);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.table17);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.table18);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade13);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade14);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade15);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade16);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade17);
tableRow.setVisibility(View.VISIBLE);
tableRow = (TableRow) getActivity().findViewById(R.id.tablegrade18);
tableRow.setVisibility(View.VISIBLE);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
return rootView;
}
}
Die Nullobjektreferenz ist auf der Linie
tableRow = (TableRow) getActivity().findViewById(R.id.table13);
tableRow.setVisibility(View.GONE);
so würde ich den Rest übernehmen davon nicht funktioniert. Wiederum als Info, die Tabellen sind auf einem völlig anderen Aktivitätsfragment, also wie würde ich es so machen, dass das Fragment die Pfeilen finden kann, obwohl ich Kontext deklariere.
ich die Tabellenzeilen geändert haben RootView angezeigt werden jedoch nicht verstehen, den zweiten Teil und ich bin mir nicht sicher, wie man die Variable global macht. – Madjosh
Ok nicht notwendig, wenn Sie die Kontrolle in oncreateview finden, sonst machen Sie es global –
Was meinst du mit Kontrolle? – Madjosh