gpt4 book ai didi

java - 我们可以使用 FirebaseListAdapter 来填充 android 中的 TabLayout 吗?

转载 作者:行者123 更新时间:2023-11-30 00:05:10 30 4
gpt4 key购买 nike

我有一个类似于以下的 firebase 数据库 -

"root":
{
"survey":
{
"1":
{
"survey_question":"Who is a better player?",
"options":
{
"1":"Ronaldo",
"2":"Messi"
}
},
"2":
{
"survey_question":"Who is a better superhero?",
"options":
{
"1":"Iron man",
"2":"Captain America"
}
}
}
}

我想在 TabLayout 中显示调查,以便一个问题及其选项显示在一个选项卡上。调查的数量可以动态更改。如果有 n 个调查,则应该有 n 个选项卡来显示它们。每个选项卡都具有相同的布局。

注意:TabLayout 出现在还包含 ViewPager 的 fragment 中。

实现它的最佳方法是什么?我应该使用 FirebaseListAdapter 或 FirebaseRecyclerAdapter,还是其他任何东西?

编辑:我希望调查以下列格式显示 -

Display surveys GIF

最佳答案

你可以这样做(伪代码)

public class Survey implements Parcelable {
//.... firebase model class
}

适配器

public class FirebasePagerAdapter extends FragmentStatePagerAdapter {

private List<Survey> surveyList = new ArrayList<>();
private List<Fragment> surveyFragments = new ArrayList<>();

private ValueEventListener valueEventListener;
private DatabaseReference surveyReference;

public FirebasePagerAdapter(FragmentManager fm) {
super(fm);
surveyReference = FirebaseDatabase.getInstance().getReference().child("root/survey");
surveyReference.addEventListener(valueEventListener);
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
surveyList.clear();
surveyFragments.clear(); // if you implement .equals() in Survey
// you do a for loop that only updates the changed/added/removed items, instead of all of them..

for(DataSnapshot surveySnapshot: snapshot.getChildren()){
String surveyNumber = surveySnapshot.getKey();
Survey survey = surveySnapshot.getValue(Survey.class);
surveyList.add(survey);
surveyFragments.add(SurveyFragment.newInstance(surveyNumber, survey));
}
notifyDataSetChanged();
}

@Override
public void onCancelled(DatabaseError error){
//...
}
};
}

@Override
public Fragment getItem(int position) {
return surveyFragments.get(position);
}

@Override
public int getCount() {
return surveyFragments.size();
}

public void cleanup() {
if (valueEventListener != null) {
surveyReference.removeEventListener(valueEventListener);
}
}
}

您将实现 SurveyFragment 以将您的调查对象作为参数接收(确保其可打包或可序列化)。我认为这样的事情在大多数情况下都会起作用。如果 surveyList 实时更新其大小(添加、删除),那么您可能可以将 ValueEventListener 替换为 ChildEventListener,但您将不得不做更多的工作,ADD、DELETE、MOVE ...检查这个旧版本的FirebaseRecyclerAdapter,它具有您需要移植到 PagerAdapter 的类似功能。

https://github.com/firebase/FirebaseUI-Android/blob/version-1.0.0/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerAdapter.java

https://github.com/mmazzarolo/firebase-recyclerview/blob/master/app/src/main/java/com/example/matteo/firebase_recycleview/FirebaseRecyclerAdapter.java

关于java - 我们可以使用 FirebaseListAdapter 来填充 android 中的 TabLayout 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49153052/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com