У меня есть ViewPager и в каждом ViewPager у меня есть ListView. \ValueEventListener не будет выполнен после установки адаптера
Когда я запускаю мое приложение, IndexOutOfBoundsException
брошен в CourseListAdapter, потому что ValueEventListener
не выполняются ...
но когда я удалить listView.setAdapter(mAdapter);
мой ListView не будет заполняться, но я вижу D/CourseListAdapter: Getting information
в моем регистраторе ..
My Фрагмент, который устанавливает ListView:
public class DayFragment
extends Fragment {
private static final String TAG = "DayFragment";
private CourseListAdapter mAdapter;
private int day = 0;
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.course_list, container, false);
Bundle bundle = getArguments();
// Yay a day is given
if (bundle != null) {
day = bundle.getInt("day");
}
ListView listView = (ListView) rootView.findViewById(R.id.list_view);
mAdapter = new CourseListAdapter(getActivity(), day);
listView.setAdapter(mAdapter);
return rootView;
}
@Override
public void onStop() {
super.onStop();
Log.i(TAG, "Removing the listener");
// Clean up
mAdapter.removeListener();
}
}
Мой ListView адаптер:
public class CourseListAdapter
extends BaseAdapter {
private static final String TAG = "CourseListAdapter";
private Context mContext;
private List<Day> mDays = new ArrayList<>();
private int mDay = 0;
private ValueEventListener mListener;
private FirebaseDatabase mDatabase;
private DatabaseReference mReference;
public CourseListAdapter(final Activity context, int day) {
mContext = context;
mDay = day;
// Setup Firebase
mDatabase = FirebaseDatabase.getInstance();
mReference = mDatabase.getReference();
mListener = mReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, "Getting information");
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Day day = postSnapshot.getValue(Day.class);
for (DataSnapshot course : postSnapshot.child("courses").getChildren()) {
day.addCourse(course.getValue(Course.class));
}
mDays.add(day);
}
// Tell some data changed
notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, "Listen was cancelled, no more updates will occur");
}
});
}
public void removeListener() {
mReference.removeEventListener(mListener);
}
@Override
public int getCount() {
Day day = mDays.get(mDay);
return day.getCourses().size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Day day = mDays.get(mDay);
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.course_items, parent, false);
viewHolder.course = (TextView) convertView.findViewById(R.id.course);
viewHolder.classRoom = (TextView) convertView.findViewById(R.id.class_room);
viewHolder.begin = (TextView) convertView.findViewById(R.id.begin);
viewHolder.end = (TextView) convertView.findViewById(R.id.end);
viewHolder.teacher = (TextView) convertView.findViewById(R.id.teacher);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.course.setText(day.getCourses().get(position).name);
viewHolder.classRoom.setText(day.getCourses().get(position).classRoom);
viewHolder.begin.setText(day.getCourses().get(position).from);
viewHolder.end.setText(day.getCourses().get(position).to);
viewHolder.teacher.setText(day.getCourses().get(position).teacher);
return convertView;
}
private class ViewHolder {
TextView course;
TextView classRoom;
TextView begin;
TextView end;
TextView teacher;
}
}
Моя база данных общедоступна. Если я удалю '' 'listView.setAdapter (mAdapter),' '' part it works ... – yooouuri
Можете ли вы опубликовать журнал ошибок? Я имею в виду, где произошло событие IndexOutOfBoundsException? –
http://pastebin.com/raw/VjpZgCdh Исключение вызывается '' '' Day day = mDays.get (mDay); '' '' '' 'getCount'''. Поскольку «ValueEventListener» не будет вызван, массив пуст! – yooouuri