Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 滚动时使用FirebaseListAdapter和ListView复制数据_Java_Android_Listview_Firebase Realtime Database_Adapter - Fatal编程技术网

Java 滚动时使用FirebaseListAdapter和ListView复制数据

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

我正在写一个简单的训练日志。在这里,我使用FirebaseListAdapter填充一个视图,当我最初加载它时,它工作正常。问题是,当我有更多数据并向下滚动时,数据每次都会重复。我知道每次向下或向上滚动时都会重新创建片段,但我无法找到解决方案。下图中的数据填充在populateView函数中

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的新手,所以我不知道它到底是什么。