Я использую класс, предусмотренный для Android Studio, для активности с вкладками, в котором используются вкладки Action Bar с ViewPager. Внутри этого действия я пытаюсь инициализировать RecyclerView с данными из базы данных Firebase.Firebase + RecyclerView: RecyclerView не отображается при запуске приложения
Проблема: при первом запуске приложения RecyclerView пуст, как показано ниже.
Если закрыть и снова открыть приложение из эмулятора, мой RecyclerView их получает, как и должно быть, как показано ниже.
Любые идеи, почему это может происходить? У меня есть теория, но я не смог найти решение. Прочитав страницу FragmentPagerAdapter, у меня сложилось впечатление, что фрагменты должны быть статичными (я не знаю, каковы могут быть последствия этого, поэтому, если кто-то может пролить свет на это, это будет оценено). В первом запуске приложения он инициализирует RecyclerView. Затем он добавляет данные из базы данных Firebase, но поскольку RecyclerView уже инициализирован, он пуст и никогда не обновляется должным образом. Я пробовал называть методы уведомления ... безрезультатно.
метод onCreateView StudentFragment в:
private View view;
private Context c;
private RecyclerView mRecyclerView;
private LinearLayoutManager manager;
private Firebase mFirebaseRef;
private FirebaseRecyclerAdapter<Student, ViewHolder> firebaseRecyclerAdapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_students, container, false);
mFirebaseRef = new Firebase("<your Firebase link here>");
c = getContext();
//Initializes Recycler View and Layout Manager.
mRecyclerView = (RecyclerView) view.findViewById(R.id.studentRecyclerView);
manager = new LinearLayoutManager(c);
mRecyclerView.setHasFixedSize(true);
firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<Student, ViewHolder>(
Student.class,
R.layout.single_student_recycler,
ViewHolder.class,
mFirebaseRef
) {
@Override
protected void populateViewHolder(ViewHolder viewHolder, Student student, int i) {
viewHolder.vFirst.setText(student.getFirst());
viewHolder.vLast.setText(student.getLast());
viewHolder.vDue.setText(Double.toString(student.getCurrentlyDue()));
viewHolder.vRadio.setButtonTintList(ColorStateList.valueOf(Color.parseColor(student.getColor())));
Log.d(TAG, "populateViewHolder called");
}
};
mRecyclerView.setAdapter(firebaseRecyclerAdapter);
mRecyclerView.setLayoutManager(manager);
return view;
}
ViewHolder:
public static class ViewHolder extends RecyclerView.ViewHolder {
public final TextView vFirst;
public final TextView vLast;
public final TextView vDue;
public final RadioButton vRadio;
public ViewHolder(View itemView) {
super(itemView);
vFirst = (TextView) itemView.findViewById(R.id.recycler_main_text);
vLast = (TextView) itemView.findViewById(R.id.recycler_sub_text);
vRadio = (RadioButton) itemView.findViewById(R.id.recycler_radio_button);
vDue = (TextView) itemView.findViewById(R.id.recycler_due_text);
}
метод OnCreate Homescreen в:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_homescreen);
// 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);
}
Firebase контекст установлен на другое приложение, которое начинается, как только Homescreen деятельности начинается. Любая помощь будет оценена по достоинству.
Редактировать: Я копал страницу FirebaseUI GitHub, в которой, скорее всего, лежит проблема, и нашел другого пользователя с той же проблемой. Кажется, что onBindViewHolder не вызывается после notifyItemInserted в классе FirebaseRecyclerAdapter. Теперь, чтобы исправить это ...
Я пытаюсь сделать то же самое, что и вы, но не могу заставить его работать, вот моя проблема объясняется, если у вас есть время, чтобы посмотреть на нее. Благодаря! https://stackoverflow.com/questions/38263758/populateviewholder-not-executing-with-firebaserecycleradapter-android – raphh