У меня есть вкладка с приложением фрагмента и для управления страницами, я использую FragmentStatePageAdapter. При создании экземпляра моего класса фрагмента в методе getItem (int position) в классе адаптера я хочу передать данные из Firestore в конструктор. До сих пор у меня ничего не получалось.
Когда я жестко кодирую данные в классе моего адаптера, он отлично работает. Но это все.
Мой класс фрагмента выглядит примерно так:
public class MyFragment extends Fragment {
//constructor looks like this
public static MyFragment newInstance(String id, String txt){.....}
//my model class is in here too and looks like this
public static final class Entry {
private String txt;
private String id;
public Entry(String txt, String id) {
this.txt = txt;
this.id = id;
}
public String getTxt() {
return text;
}
public String getId() {
return id;
}
}
}
Мой класс адаптера выглядит следующим образом:
public class MyPageAdapter extends FragmentStatePageAdapter {
private static final List<MyFragment.Entry> FIRE_LIST;
//if i hardcode, it works perfectly: like below
static {
List<MyFragment.Entry> list = new ArrayList<MyFragment.Entry>();
list.add(new MyFragment.Entry("txt1", "id1"));
list.add(new MyFragment.Entry("txt2", "id2"));
FIRE_LIST = Collections.unmodifiableList(list);
}
//constructor:
private final Context context;
public MyPageAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position) {
String id = FIRE_LIST.get(position).getId();
String txt = FIRE_LIST.get(position).getTxt();
MyFragment myFragment = MyFragment.newInstance(id, txt);
return myFragment;
}
@Override
public int getCount() {
return FIRE_LIST.size();
}
}
Теперь рассмотрим, у меня есть коллекцияв Firebase Firestore я называю «пост». В посте есть документы на ключи txt и id. Я хочу вместо жесткого кодирования, который я делал выше, вместо этого я хочу заполнить FIRE_LIST данными из моей коллекции сообщений. Как мне сделать это? Надеюсь, это достаточно ясно.