从菜单中调用setAdapter会使应用程序崩溃

时间:2020-09-08 17:31:18

标签: android android-recyclerview dialog adapter

单击菜单项时,我试图使用一个对话框。当对话框中没有recyclerview时,我可以成功完成此操作。

这里是处理菜单项单击以及对话框和recyclerview初始化的活动代码:

  // Menu Stuff
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.add_exercise_activity_menu, menu);
      return super.onCreateOptionsMenu(menu);
  }

  @Override
  public boolean onOptionsItemSelected(@NonNull MenuItem item) {
      if (item.getItemId() == R.id.timer) {
          Toast bread = Toast.makeText(getApplicationContext(), "Timer Selected", Toast.LENGTH_SHORT);
          bread.show();
      } else if (item.getItemId() == R.id.history) {
          // Prepare to show exercise history dialog box
          LayoutInflater inflater = LayoutInflater.from(AddExerciseActivity.this);
          View view = inflater.inflate(R.layout.exercise_history_dialog, null);
          AlertDialog alertDialog = new AlertDialog.Builder(AddExerciseActivity.this).setView(view).create();

          // Declare local data structure
          ArrayList<WorkoutExercise> All_Performed_Sessions = new ArrayList<>();

          // Find all performed sessions of a specific exercise and add them to local data structure
          for (int i = 0; i < MainActivity.Workout_Days.size(); i++) {
              for (int j = 0; j < MainActivity.Workout_Days.get(i).getExercises().size(); j++) {
                  if (MainActivity.Workout_Days.get(i).getExercises().get(j).getExercise().equals(exercise_name)) {
                      All_Performed_Sessions.add(MainActivity.Workout_Days.get(i).getExercises().get(j));
                  }
              }
          }

          // Set Exercise History Recycler View
          RecyclerView recyclerView = findViewById(R.id.recyclerView_Exercise_History);
          WorkoutExerciseAdapter4 workoutExerciseAdapter4 = new WorkoutExerciseAdapter4(AddExerciseActivity.this, All_Performed_Sessions);

          // Crash Here
          recyclerView.setAdapter(workoutExerciseAdapter4);
          recyclerView.setLayoutManager(new LinearLayoutManager(AddExerciseActivity.this));

          alertDialog.show();
      }
      return super.onOptionsItemSelected(item);
   }

这是适配器代码:

public class WorkoutExerciseAdapter4 extends
    RecyclerView.Adapter<WorkoutExerciseAdapter4.MyViewHolder> {

    Context ct;
    ArrayList<WorkoutExercise> Exercises;

    public WorkoutExerciseAdapter4(Context ct, ArrayList<WorkoutExercise> Exercises) {
        this.ct = ct;
        this.Exercises = new ArrayList<>(Exercises);
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(this.ct);
        View view = inflater.inflate(R.layout.workout_exercise_row4, parent, false);
        return new MyViewHolder(view);

    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        // Change TextView text
        holder.tv_date.setText(Exercises.get(position).getDate());

        // Recycler View Stuff
        // Change RecyclerView items
        WorkoutSetAdapter workoutSetAdapter = new WorkoutSetAdapter(ct, Exercises.get(position).getSets());
        holder.recyclerView.setAdapter(workoutSetAdapter);
        holder.recyclerView.setLayoutManager(new LinearLayoutManager(ct));
    }


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

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tv_date;
        RecyclerView recyclerView;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            tv_date = itemView.findViewById(R.id.tv_date);
            recyclerView = itemView.findViewById(R.id.recycler_view_day);
        }
    }
}

我尝试使用getApplicationContext()thisActivityname.this,但似乎没有任何效果,而且我总是在同一行setAdapter(...)上崩溃。

1 个答案:

答案 0 :(得分:0)

尝试更改此内容:

RecyclerView recyclerView = findViewById(R.id.recyclerView_Exercise_History);

对此:

RecyclerView recyclerView = view.findViewById(R.id.recyclerView_Exercise_History);
相关问题