Java 滚动时使用FirebaseListAdapter和ListView复制数据
我正在写一个简单的训练日志。在这里,我使用FirebaseListAdapter填充一个视图,当我最初加载它时,它工作正常。问题是,当我有更多数据并向下滚动时,数据每次都会重复。我知道每次向下或向上滚动时都会重新创建片段,但我无法找到解决方案。下图中的数据填充在populateView函数中Java 滚动时使用FirebaseListAdapter和ListView复制数据,java,android,listview,firebase-realtime-database,adapter,Java,Android,Listview,Firebase Realtime Database,Adapter,我正在写一个简单的训练日志。在这里,我使用FirebaseListAdapter填充一个视图,当我最初加载它时,它工作正常。问题是,当我有更多数据并向下滚动时,数据每次都会重复。我知道每次向下或向上滚动时都会重新创建片段,但我无法找到解决方案。下图中的数据填充在populateView函数中 public class HistoryFragment extends Fragment { private ListView lv; private FirebaseListAdapter adapt
public class HistoryFragment extends Fragment {
private ListView lv;
private FirebaseListAdapter adapter;
private FirebaseAuth mAuth;
public HistoryFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_history, container, false);
mAuth = FirebaseAuth.getInstance();
String user_id = mAuth.getCurrentUser().getUid();
lv = v.findViewById(R.id.lvHistory);
Query query = FirebaseDatabase.getInstance().getReference().child("Workouts").child(user_id);
FirebaseListOptions<Workout> options = new FirebaseListOptions.Builder<Workout>()
.setLayout(R.layout.workout)
.setQuery(query, Workout.class)
.build();
adapter = new FirebaseListAdapter(options) {
@Override
protected void populateView(@NonNull View v, @NonNull Object model, int position) {
TextView workoutname = v.findViewById(R.id.workoutName);
TextView exerciseInfo = v.findViewById(R.id.exerciseInfo);
Workout workout = (Workout) model;
workoutname.setText(workout.getWorkoutName().toString());
int counter = 0;
for (Exercise exercise : workout.getExercises()) {
exerciseInfo.append(exercise.toString() + "\n");
}
}
};
lv.setAdapter(adapter);
return v;
}
}
公共类HistoryFragment扩展了片段{
私有ListView lv;
私有FirebaseListAdapter;
私人消防队;
公共历史片段(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment_历史,容器,错误);
mAuth=FirebaseAuth.getInstance();
字符串user_id=mAuth.getCurrentUser().getUid();
lv=v.findViewById(R.id.lvHistory);
Query Query=FirebaseDatabase.getInstance().getReference().child(“训练”).child(用户id);
FirebaseListOptions=new FirebaseListOptions.Builder()
.setLayout(右布局训练)
.setQuery(查询,训练.class)
.build();
适配器=新FirebaseListAdapter(选项){
@凌驾
受保护的void populateView(@NonNull View v、@NonNull对象模型、int位置){
TextView-workoutname=v.findviewbyd(R.id.workoutname);
TextView exerciseInfo=v.findviewbyd(R.id.exerciseInfo);
锻炼锻炼=(锻炼)模式;
workoutname.setText(workout.getWorkoutName().toString());
int计数器=0;
for(Exercise Exercise:workout.getExercises()){
exerciseInfo.append(exercise.toString()+“\n”);
}
}
};
低压设置适配器(适配器);
返回v;
}
}
如果您对
populateView()
中使用的for循环进行注释,它是否解决了您的问题?我尝试过,但没有解决问题。循环在那里,因为我必须展示训练中的所有练习。好吧,这不是关于我发现的循环,而是关于populateView本身。我尝试了更多,但问题是populateView被多次调用。不幸的是,我是FirebaseListAdapter的新手,所以我不知道它到底是什么。