2016-07-25 3 views
0

Добрый день, У меня проблема с моим пользовательским адаптером, не заполняющим мои списки. Я получаю эту ошибку:ListView не заполняется данными

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) 

Делать мне кажется, мой ArrayList пусто .. это где я называю адаптер:

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); 

Это адаптер:

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; 
} 
} 

это пользовательский предметный класс:

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; 
// } 
} 

это часть WorkoutDaysActivity (где отправлено намерение) (Ive включил метод создания, а также настройки 3 вкладки.

@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; 
     } 
// 
    } 
} 

Спасибо за помощь!

ответ

0

Ошибка ясна, один из объектов ListView равно нулю:

final ListView listViewFri = (ListView) findViewById(R.id.listViewFri); 
final ListView listViewMon = (ListView) findViewById(R.id.listViewMon); 
final ListView listViewWed = (ListView) findViewById(R.id.listViewWed); 

проверка делает просмотр идентификаторами являются правильными

+0

Спасибо за ответ, где я установил адаптер, у меня есть намерение, которое отправляет приложение в новый класс при нажатии дочернего элемента. В этом классе у меня есть контент, настроенный на другой макет. Я думаю, что это может быть проблема. Аргумент listviews arent в любом из этих макетов, они фактически находятся в фрагментах вкладки, на которые отправляется дочерний элемент. Я не знаю, как я могу это исправить. Я добавлю в вопрос, что активность. – LBJ33

+0

Я добавил строку Intent, где Im пытается установить адаптер, я также добавил класс, к которому он отправил приложение, и где установлены вкладки. Спасибо за помощь – LBJ33

0

Это говорит о том, что ListViews равны нулю, вы можете проверить XML, чтобы убедиться, что вы добавив список просмотров правильно. Можете ли вы также вставить свой код в своей команде onCreate или где вы надуваете xml или делаете setContentView. Вы не правильно настроили представление. Ваши arraylists в порядке, и ваш код адаптера также выглядит хорошо.

+0

Спасибо за ответ, где я установил адаптер, у меня есть намерение, которое отправляет приложение в новый класс при нажатии дочернего элемента. В этом классе у меня есть контент, настроенный на другой макет. Я думаю, что это может быть проблема. Аргумент listviews arent в любом из этих макетов, они фактически находятся в фрагментах вкладки, на которые отправляется дочерний элемент. Я не знаю, как я могу это исправить. Я добавлю в вопрос, что активность. – LBJ33

+0

Я добавил строку Intent, где Im пытается установить адаптер, я также добавил класс, к которому он отправил приложение, и где установлены вкладки. Спасибо за помощь – LBJ33

+0

Мне интересно, может быть, я должен делать весь этот код в аргументе switch, где настройки табуляции настроены. Только тогда проблема заключается в том, как я могу сообщить, какой элемент в предыдущем раскрывающемся списке списка был нажат, так как каждый из них даст разные данные. – LBJ33

0

Ошибка довольно проста. При получении справки listView вы делаете ошибку при написании идентификатора. , например. R.id.list (list is the ID здесь)

Возможно, вы используете другую ссылку, которая не найдена в .xml вашего макета, который вы используете для этого действия.