Guten Tag, Ich habe ein Problem mit meinem benutzerdefinierten Adapter nicht meine Listenansichten bevölkern. Ich bekomme diese Fehlermeldung:ListView wird nicht mit Daten gefüllt
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
at com.bestworkouts.sheikoworkout.MyWorkout$1.onChildClick(MyWorkout.java:64)
machen mich denken, meine Arraylist leer ist .. das ist, wo ich den Adapter nennen:
ArrayList<CustomObject> w29 = new ArrayList<CustomObject>();
w29.add(new CustomObject("Squat", "65%", "6", "150", false));
final CustomListViewAdapter customListViewAdapter = new CustomListViewAdapter(this, w29);
expandableListView = (ExpandableListView) findViewById(R.id.listViewWorkouts);
Workouts_details = DataProvider.getInfo();
Workout_list = new ArrayList<>(Workouts_details.keySet());
mAdapter = new WorkoutsAdapter(this, Workouts_details, Workout_list);
final ListView listViewFri = (ListView) findViewById(R.id.listViewFri);
final ListView listViewMon = (ListView) findViewById(R.id.listViewMon);
final ListView listViewWed = (ListView) findViewById(R.id.listViewWed);
expandableListView.setAdapter(mAdapter);
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
if (groupPosition == 0) {
if (childPosition == 0) {
listViewMon.setAdapter(customListViewAdapter);
listViewFri.setAdapter(customListViewAdapter);
listViewWed.setAdapter(customListViewAdapter);
Intent intent = new Intent(getApplicationContext(), WorkoutDaysActivity.class);
startActivity(intent);
Dies ist der Adapter:
public class CustomListViewAdapter extends BaseAdapter {
private LayoutInflater inflater;
public ArrayList<CustomObject> objects;
boolean[] checkBoxState;
CustomObject data[] = null;
private class ViewHolder {
TextView txtExercise;
TextView txtPercent;
TextView txtReps;
TextView txtWeight;
CheckBox check1;
}
public void addAdapterItem(CustomObject item) {
objects.add(item);
}
public CustomListViewAdapter(Context context, ArrayList<CustomObject> objects) {
inflater = LayoutInflater.from(context);
this.objects = objects;
checkBoxState= new boolean[objects.size()];
}
public int getCount() {
return objects.size();
}
public CustomObject getItem(int position) {
return objects.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.workout_item, null);
holder.txtExercise = (TextView) convertView.findViewById(R.id.txtExercise);
holder.txtPercent = (TextView) convertView.findViewById(R.id.txtPercentage);
holder.txtReps = (TextView) convertView.findViewById(R.id.txtReps);
holder.txtWeight = (TextView) convertView.findViewById(R.id.txtWeight);
holder.check1 = (CheckBox) convertView.findViewById(R.id.check1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtExercise.setText(objects.get(position).getExercise());
holder.txtPercent.setText(objects.get(position).getPercent());
holder.txtReps.setText(objects.get(position).getReps());
holder.txtWeight.setText(objects.get(position).getWeight());
holder.check1.setChecked(checkBoxState[position]);
holder.check1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(((CheckBox)v).isChecked()) {
checkBoxState[position] = true;
} else {
checkBoxState[position] = false;
}
}
});
return convertView;
}
}
dies die benutzerdefinierte Objektklasse:
public class CustomObject {
private String exercise;
private String percent;
private String reps;
private String weight;
private boolean check1;
public CustomObject(String exercise, String percent, String reps, String weight, boolean check1) {
this.exercise = exercise;
this.percent = percent;
this.reps = reps;
this.weight = weight;
this.check1 = check1;
}
public String getExercise() {
return exercise;
}
public String getPercent() {
return percent;
}
public String getReps() {
return reps;
}
public String getWeight() {
return weight;
}
// public CheckBox getCheck1() {
// return check1;
// }
}
Dies ist Teil der WorkoutDaysActivity (Wo die Absicht gesendet wird) (Ich habe die Methode on create sowie die 3 Registerkarten mit eingerichtet.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.workout_days);
mToolBar = activateToolbarWithHomeEnabled();
setUpNavigationDrawer();
// setSupportActionBar(toolbar);
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1:
View rootView = inflater.inflate(R.layout.fragment_workout_days, container, false);
// CustomListViewAdapter mCustomListViewAdapter;
// mCustomListViewAdapter = new CustomListViewAdapter(this,)
// ListView listViewMon = (ListView) rootView.findViewById(R.id.listViewMon);
// listViewMon.setAdapter(mCustomListViewAdapter);
return rootView;
case 2: View rootView2 = inflater.inflate(R.layout.fragment_sub_page1, container, false);
TextView textView2 = (TextView) rootView2.findViewById(R.id.textView2);
textView2.setText("Workout 29 Week 1");
return rootView2;
case 3:
View rootView3 = inflater.inflate(R.layout.fragment_sub_page2, container, false);
TextView textView3 = (TextView) rootView3.findViewById(R.id.txtFrag3);
textView3.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));
return rootView3;
default: View rootView4 = inflater.inflate(R.layout.fragment_workout_days, container, false);
TextView textView4 = (TextView) rootView4.findViewById(R.id.txtFrag1);
textView4.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));
return rootView4;
}
//
}
}
Vielen Dank für Ihre Hilfe!
Danke für die Antwort, unter, wo ich den Adapter eingestellt habe, habe ich eine Absicht, die die App an eine neue Klasse sendet, wenn Kind Element geklickt. In dieser Klasse habe ich den Inhalt auf ein anderes Layout gesetzt. Ich denke, hier könnte das Problem liegen. Die Listenansichten sind in keinem dieser Layouts vorhanden, sie befinden sich tatsächlich in den Tabfragmenten, an die der Childclick gesendet wird. Ich bin mir nicht sicher, wie ich das beheben kann. Ich werde in der Frage diese Aktivität hinzufügen. – LBJ33
Ich habe die Intent-Zeile hinzugefügt, in der Im versucht, den Adapter festzulegen, ich habe auch die Klasse hinzugefügt, an die die App gesendet wird, und wo die Registerkarten eingerichtet sind. Danke für die Hilfe – LBJ33