Java 即使设置了适配器,也不会显示RecyclerView

Java 即使设置了适配器,也不会显示RecyclerView,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我陷入了这个问题,我不知道这是怎么回事。我正在尝试使用RecyclerView并使用Firebase实时数据库中的数据填充它。我已经设置了适配器,但问题是onBindViewHolder和onCreateViewHolder没有被调用。这是密码 WorkoutAdapter.java public class WorkoutAdapter extends RecyclerView.Adapter<WorkoutAdapter.WorkoutViewHolder> { private

我陷入了这个问题,我不知道这是怎么回事。我正在尝试使用RecyclerView并使用Firebase实时数据库中的数据填充它。我已经设置了适配器,但问题是onBindViewHolder和onCreateViewHolder没有被调用。这是密码

WorkoutAdapter.java

public class WorkoutAdapter extends RecyclerView.Adapter<WorkoutAdapter.WorkoutViewHolder> {
private List<Workout> workoutList;

public WorkoutAdapter(List<Workout> workoutList) {
    this.workoutList = workoutList;
}

public WorkoutAdapter() {
}

public List<Workout> getWorkoutList() {
    return workoutList;
}

public void setWorkoutList(List<Workout> workoutList) {
    this.workoutList = workoutList;
}

@NonNull
@Override
public WorkoutViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    Log.i("DEBUG MENU", "onCreateViewHolder");
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
    ItemWorkoutBinding binding = ItemWorkoutBinding.inflate(layoutInflater, parent, false);
    return new WorkoutViewHolder(binding);
}

@Override
public void onBindViewHolder(@NonNull WorkoutViewHolder holder, int position) {
    Log.i("DEBUG MENU", "onBindViewHolder");
    Workout workout = workoutList.get(position);
    holder.bind(workout);
}

@Override
public int getItemCount() {
    return workoutList.size();
}

class WorkoutViewHolder extends RecyclerView.ViewHolder {
    private ItemWorkoutBinding binding;

    public WorkoutViewHolder(ItemWorkoutBinding binding) {
        super(binding.getRoot());
        this.binding = binding;
    }

    public void bind(Workout workout) {
        binding.setWorkout(workout);
        binding.executePendingBindings();
    }
}
public class WorkoutPlanFragment extends Fragment {

private WorkoutPlanViewModel mViewModel;
private WorkoutPlanFragmentBinding binding;
private DatabaseReference mDatabase;
Plan plan;
List<Workout> workoutList;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mDatabase = FirebaseDatabase.getInstance().getReference();
}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
    WorkoutPlanViewModelFactory workoutPlanViewModelFactory = new WorkoutPlanViewModelFactory(workoutList);
    mViewModel = new ViewModelProvider(this, workoutPlanViewModelFactory).get(WorkoutPlanViewModel.class);
    binding = DataBindingUtil.inflate(inflater, R.layout.workout_plan_fragment, container, false);
    binding.setViewmodel(mViewModel);
    View view = binding.getRoot();
    assert getArguments() != null;
    plan = WorkoutPlanFragmentArgs.fromBundle(getArguments()).getPlan();
    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(plan.getPlan_name());
    Glide.with(binding.getRoot().getContext()).load(plan.getUri()).into(binding.imageView2);
    return view;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    binding.setPlan(plan);
    setupRvWorkout();
}

public void setupRvWorkout() {
    RecyclerView recyclerView = binding.workoutRV;
    LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(layoutManager);
    mDatabase.child("exercise_workout").child("data").orderByChild("plan_id").equalTo(plan.getPlan_key()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            workoutList = new ArrayList<>();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                String workout_id = snapshot.child("workout_id").getValue(String.class);
                mDatabase.child("workout").child(workout_id).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        Workout workout = snapshot.getValue(Workout.class);
                        workout.setWorkout_id(workout_id);
                        Log.d("GET", "workout_name: " + workout.getWorkout_name() + " " + workout.getWorkout_id());
                        workoutList.add(workout);
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {

                    }
                });
            }
            WorkoutAdapter adapter = new WorkoutAdapter();
            recyclerView.setAdapter(adapter);
            adapter.setWorkoutList(workoutList);
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });

}
公共类WorkoutAdapter扩展了RecyclerView.Adapter{
私人名单;
公共工作适配器(列表工作列表){
this.workoutList=workoutList;
}
公共训练适应器(){
}
公共列表getWorkoutList(){
返回工作列表;
}
公共作废设置作业列表(列表作业列表){
this.workoutList=workoutList;
}
@非空
@凌驾
public WorkoutViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
i(“调试菜单”、“onCreateViewHolder”);
LayoutInflater LayoutInflater=LayoutInflater.from(parent.getContext());
ItemWorkoutBinding=ItemWorkoutBinding.inflate(布局平坦,父项,false);
返回新的WorkoutViewHolder(绑定);
}
@凌驾
BindViewHolder上的公共无效(@NonNull WorkoutViewHolder,int位置){
i(“调试菜单”、“onBindViewHolder”);
训练=训练列表。获取(位置);
束缚(锻炼);
}
@凌驾
public int getItemCount(){
返回workoutList.size();
}
类WorkoutViewHolder扩展了RecyclerView.ViewHolder{
私有项绑定;
公共WorkoutViewHolder(ItemWorkoutBinding绑定){
super(binding.getRoot());
这个。绑定=绑定;
}
公共空间绑定(训练){
绑定。设置训练(训练);
binding.executePendingBindings();
}
}
WorkoutFragment.java

public class WorkoutAdapter extends RecyclerView.Adapter<WorkoutAdapter.WorkoutViewHolder> {
private List<Workout> workoutList;

public WorkoutAdapter(List<Workout> workoutList) {
    this.workoutList = workoutList;
}

public WorkoutAdapter() {
}

public List<Workout> getWorkoutList() {
    return workoutList;
}

public void setWorkoutList(List<Workout> workoutList) {
    this.workoutList = workoutList;
}

@NonNull
@Override
public WorkoutViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    Log.i("DEBUG MENU", "onCreateViewHolder");
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
    ItemWorkoutBinding binding = ItemWorkoutBinding.inflate(layoutInflater, parent, false);
    return new WorkoutViewHolder(binding);
}

@Override
public void onBindViewHolder(@NonNull WorkoutViewHolder holder, int position) {
    Log.i("DEBUG MENU", "onBindViewHolder");
    Workout workout = workoutList.get(position);
    holder.bind(workout);
}

@Override
public int getItemCount() {
    return workoutList.size();
}

class WorkoutViewHolder extends RecyclerView.ViewHolder {
    private ItemWorkoutBinding binding;

    public WorkoutViewHolder(ItemWorkoutBinding binding) {
        super(binding.getRoot());
        this.binding = binding;
    }

    public void bind(Workout workout) {
        binding.setWorkout(workout);
        binding.executePendingBindings();
    }
}
public class WorkoutPlanFragment extends Fragment {

private WorkoutPlanViewModel mViewModel;
private WorkoutPlanFragmentBinding binding;
private DatabaseReference mDatabase;
Plan plan;
List<Workout> workoutList;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mDatabase = FirebaseDatabase.getInstance().getReference();
}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
    WorkoutPlanViewModelFactory workoutPlanViewModelFactory = new WorkoutPlanViewModelFactory(workoutList);
    mViewModel = new ViewModelProvider(this, workoutPlanViewModelFactory).get(WorkoutPlanViewModel.class);
    binding = DataBindingUtil.inflate(inflater, R.layout.workout_plan_fragment, container, false);
    binding.setViewmodel(mViewModel);
    View view = binding.getRoot();
    assert getArguments() != null;
    plan = WorkoutPlanFragmentArgs.fromBundle(getArguments()).getPlan();
    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(plan.getPlan_name());
    Glide.with(binding.getRoot().getContext()).load(plan.getUri()).into(binding.imageView2);
    return view;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    binding.setPlan(plan);
    setupRvWorkout();
}

public void setupRvWorkout() {
    RecyclerView recyclerView = binding.workoutRV;
    LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(layoutManager);
    mDatabase.child("exercise_workout").child("data").orderByChild("plan_id").equalTo(plan.getPlan_key()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            workoutList = new ArrayList<>();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                String workout_id = snapshot.child("workout_id").getValue(String.class);
                mDatabase.child("workout").child(workout_id).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        Workout workout = snapshot.getValue(Workout.class);
                        workout.setWorkout_id(workout_id);
                        Log.d("GET", "workout_name: " + workout.getWorkout_name() + " " + workout.getWorkout_id());
                        workoutList.add(workout);
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {

                    }
                });
            }
            WorkoutAdapter adapter = new WorkoutAdapter();
            recyclerView.setAdapter(adapter);
            adapter.setWorkoutList(workoutList);
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });

}
公共类WorkoutPlanFragment扩展了片段{
私人训练计划视图模型mViewModel;
私人作业计划碎片绑定;
私有数据库参考数据库;
计划;
工作清单;
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mDatabase=FirebaseDatabase.getInstance().getReference();
}
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater充气机,@null可查看组容器,
@可为空的捆绑包savedInstanceState){
WorkoutPlanViewModelFactory WorkoutPlanViewModelFactory=新的WorkoutPlanViewModelFactory(workoutList);
mViewModel=新的ViewModelProvider(此,workoutPlanViewModelFactory).get(WorkoutPlanViewModel.class);
绑定=数据绑定直到充气(充气机,右布局图,训练计划图,容器,假);
binding.setViewmodel(mViewModel);
View=binding.getRoot();
断言getArguments()!=null;
plan=WorkoutPlanFragmentArgs.frombund(getArguments()).getPlan();
((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(plan.getPlan_name());
Glide.with(binding.getRoot().getContext()).load(plan.getUri()).into(binding.imageView2);
返回视图;
}
@凌驾
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
具有约束力。设定计划(plan);
setupRvWorkout();
}
公共空间{
RecyclerView RecyclerView=binding.workoutRV;
LinearLayoutManager布局管理器=新的LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(layoutManager);
mDatabase.child(“运动锻炼”).child(“数据”).orderByChild(“计划id”).equalTo(计划.获取计划密钥()).addValueEventListener(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
workoutList=newarraylist();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
String-workout\u-id=snapshot.child(“workout\u-id”).getValue(String.class);
mDatabase.child(“训练”).child(训练id).addListenerForSingleValueEvent(新值EventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
锻炼锻炼=快照.getValue(锻炼.class);
训练。设置训练id(训练id);
Log.d(“GET”,“训练计划名称:”+workout.getWorkout\u name()+“”+workout.getWorkout\u id());
训练列表。添加(训练);
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}
修井适配器=新修井适配器();
recyclerView.setAdapter(适配器);
adapter.setWorkoutList(workoutList);
adapter.notifyDataSetChanged();
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}
就这些,提前谢谢你

编辑:来自firebase的数据被添加到训练列表中,下面是证据:

item\u-workout.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/txt_workout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:fontFamily="@font/roboto_medium"
            android:text="@{workout.workout_name}"
            android:textSize="24sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.0" />
    </androidx.constraintlayout.widget.ConstraintLayout>

    <data>

        <variable
            name="workout"
            type="com.example.zahfitclient.model.Workout" />
    </data>
</layout>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/frameLayout2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.workoutplan.WorkoutPlanFragment">

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="0dp"
            android:layout_height="180dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:src="@tools:sample/avatars" />

        <TextView
            android:id="@+id/txt_plannameWO"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:fontFamily="@font/roboto_slab_bold"
            android:text="@{plan.plan_name}"
            android:textSize="24sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/imageView2" />

        <TextView
            android:id="@+id/txt_planlevelWO"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="16dp"
            android:fontFamily="@font/roboto_medium"
            android:text="@{plan.level_name}"
            android:textColor="?android:attr/textColorSecondary"
            app:layout_constraintEnd_toStartOf="@+id/view"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/txt_plannameWO" />

        <TextView
            android:id="@+id/txt_plantypeWO"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:fontFamily="@font/roboto_medium"
            android:text="@{plan.type_name}"
            android:textColor="?android:attr/textColorSecondary"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toEndOf="@+id/view"
            app:layout_constraintTop_toBottomOf="@+id/txt_plannameWO" />

        <View
            android:id="@+id/view"
            android:layout_width="2dp"
            android:layout_height="20dp"
            android:layout_marginStart="204dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="204dp"
            android:background="@color/black"
            android:backgroundTint="@color/material_on_surface_emphasis_medium"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/txt_plannameWO" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/workoutRV"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginTop="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view" />

    </androidx.constraintlayout.widget.ConstraintLayout>

    <data>

        <variable
            name="plan"
            type="com.example.zahfitclient.model.Plan" />

        <variable
            name="viewmodel"
            type="com.example.zahfitclient.ui.workoutplan.WorkoutPlanViewModel" />
    </data>
</layout>

workout\u plan\u fragment.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/txt_workout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:fontFamily="@font/roboto_medium"
            android:text="@{workout.workout_name}"
            android:textSize="24sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.0" />
    </androidx.constraintlayout.widget.ConstraintLayout>

    <data>

        <variable
            name="workout"
            type="com.example.zahfitclient.model.Workout" />
    </data>
</layout>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/frameLayout2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.workoutplan.WorkoutPlanFragment">

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="0dp"
            android:layout_height="180dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:src="@tools:sample/avatars" />

        <TextView
            android:id="@+id/txt_plannameWO"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:fontFamily="@font/roboto_slab_bold"
            android:text="@{plan.plan_name}"
            android:textSize="24sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/imageView2" />

        <TextView
            android:id="@+id/txt_planlevelWO"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="16dp"
            android:fontFamily="@font/roboto_medium"
            android:text="@{plan.level_name}"
            android:textColor="?android:attr/textColorSecondary"
            app:layout_constraintEnd_toStartOf="@+id/view"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/txt_plannameWO" />

        <TextView
            android:id="@+id/txt_plantypeWO"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:fontFamily="@font/roboto_medium"
            android:text="@{plan.type_name}"
            android:textColor="?android:attr/textColorSecondary"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toEndOf="@+id/view"
            app:layout_constraintTop_toBottomOf="@+id/txt_plannameWO" />

        <View
            android:id="@+id/view"
            android:layout_width="2dp"
            android:layout_height="20dp"
            android:layout_marginStart="204dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="204dp"
            android:background="@color/black"
            android:backgroundTint="@color/material_on_surface_emphasis_medium"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/txt_plannameWO" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/workoutRV"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginTop="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view" />

    </androidx.constraintlayout.widget.ConstraintLayout>

    <data>

        <variable
            name="plan"
            type="com.example.zahfitclient.model.Plan" />

        <variable
            name="viewmodel"
            type="com.example.zahfitclient.ui.workoutplan.WorkoutPlanViewModel" />
    </data>
</layout>

要实现这一点,您可以执行以下操作:

 @Override
 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
         workoutList = new ArrayList < > ();
         WorkoutAdapter adapter = new WorkoutAdapter();
         recyclerView.setAdapter(adapter);
         int[] num= {0};
         for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
             String workout_id = snapshot.child("workout_id").getValue(String.class);
             mDatabase.child("workout").child(workout_id).
             addListenerForSingleValueEvent(new ValueEventListener() {
                 @Override
                 public void onDataChange(@NonNull DataSnapshot snapshot) {
                     Workout workout = snapshot.getValue(Workout.class);
                     workout.setWorkout_id(workout_id);
                     Log.d("GET", "workout_name: " + workout.getWorkout_name() +
                     " " + workout.getWorkout_id());
                     workoutList.add(workout);
                     num[0]=num[0]++;
                     if(num[0]==dataSnapshot.getChildren().size(){
                          adapter.setWorkoutList(workoutList);
                          adapter.notifyDataSetChanged();
                     }
                 }

                 @Override
                 public void onCancelled(@NonNull DatabaseError error) {}
             });
         }
         
       
@覆盖
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
workoutList=新阵列列表<>();
修井适配器=新修井适配器();
recyclerView.setAdapter(适配器);
int[]num={0};
对于(DataSnapshot快照:DataSnapshot.getChildren()){
String-workout\u-id=snapshot.child(“workout\u-id”).getValue(String.class);
mDatabase.child(“训练”).child(训练id)。
addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
mDatabase.child("exercise_workout").child("data").orderByChild("plan_id").equalTo(plan.getPlan_key()).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        workoutList = new ArrayList<>();
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            String workout_id = snapshot.child("workout_id").getValue(String.class);
            mDatabase.child("workout").child(workout_id).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    Workout workout = snapshot.getValue(Workout.class);
                    workout.setWorkout_id(workout_id);
                    Log.d("GET", "workout_name: " + workout.getWorkout_name() + " " + workout.getWorkout_id());
                    workoutList.add(workout);
                    adapter.notifyDataSetChanged();
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {
                    throw error.toException(); // don't ignore errors
                }
            });
        }
        WorkoutAdapter adapter = new WorkoutAdapter();
        recyclerView.setAdapter(adapter);
        adapter.setWorkoutList(workoutList);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        throw error.toException(); // don't ignore errors
    }
});
WorkoutAdapter adapter = new WorkoutAdapter();
recyclerView.setAdapter(adapter);
workoutList = new ArrayList<>();
adapter.setWorkoutList(workoutList);
mDatabase.child("exercise_workout").child("data").orderByChild("plan_id").equalTo(plan.getPlan_key()).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        workoutList.clear();
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            String workout_id = snapshot.child("workout_id").getValue(String.class);
            mDatabase.child("workout").child(workout_id).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    Workout workout = snapshot.getValue(Workout.class);
                    workout.setWorkout_id(workout_id);
                    Log.d("GET", "workout_name: " + workout.getWorkout_name() + " " + workout.getWorkout_id());
                    workoutList.add(workout);
                    adapter.notifyDataSetChanged();
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {
                    throw error.toException(); // don't ignore errors
                }
            });
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        throw error.toException(); // don't ignore errors
    }
});