Android 如何在适配器中启动活动

Android 如何在适配器中启动活动,android,firebase,android-intent,android-activity,adapter,Android,Firebase,Android Intent,Android Activity,Adapter,我试图做的是在我的适配器中启动一个活动,但我的另一个适配器上似乎出现了一个错误 java.lang.ClassCastException:com.lim.fiture.fiture.models.ProgramTracker不能强制转换为com.lim.fiture.fiture.models.ProgramExecute myDayExerciseAdapter上的错误点只包含两个内容;exerciseName和exerciseReps 这是我的DayExerciseAdapter这就是错误所

我试图做的是在我的适配器中启动一个活动,但我的另一个适配器上似乎出现了一个错误

java.lang.ClassCastException:com.lim.fiture.fiture.models.ProgramTracker不能强制转换为com.lim.fiture.fiture.models.ProgramExecute

my
DayExerciseAdapter
上的错误点只包含两个内容;exerciseName和exerciseReps

这是我的DayExerciseAdapter这就是错误所在

公共类DayExerciseAdapter扩展了RecyclerView.Adapter{
私人语境;
私人ArrayList程序练习;
public DayExerciseAdapter(上下文、ArrayList程序练习){
this.context=上下文;
this.programExercises=programExercises;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.day\u exercise\u layout\u item,parent,false);
ViewHolder ViewHolder=新的ViewHolder(视图);
返回视图持有者;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.exerciseName.setText(programmexercises.get(position.getExerciseName().toUpperCase());
holder.exerciseReps.setText(String.valueOf(programmexercises.get(position.getReps());
}
@凌驾
public int getItemCount(){
返回programExercises.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
text查看exerciseName、exerciseReps、doneTxt;
公共视图持有者(视图项视图){
超级(项目视图);
exerciseName=itemView.findViewById(R.id.exerciseName);
exerciseReps=itemView.findviewbyd(R.id.exerciseReps);
doneTxt=itemView.findviewbyd(R.id.doneTxt);
}
}
}
这是我开始我的活动意图的地方

public class UserProgramWeekAdapter extends RecyclerView.Adapter<UserProgramWeekAdapter.ViewHolder> {

private Context context;
private ArrayList<ProgramTrackerWrapper> programTrackers;


public UserProgramWeekAdapter(Context context, ArrayList<ProgramTrackerWrapper> programTrackers) {
    this.context = context;
    this.programTrackers = programTrackers;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_user_program_week_adapter, parent, false);
    ViewHolder viewHolder = new ViewHolder(view);
    return viewHolder;

}

@Override
public void onBindViewHolder(UserProgramWeekAdapter.ViewHolder holder, int position) {
    Log.d("UserProgramWeekAdapter", "Day: " + programTrackers.get(position).getDay());
    Log.d("UserProgramWeekAdapter", "Size: " + programTrackers.get(position).getProgramTrackers().size());
    holder.dayTxt.setText(programTrackers.get(position).getDay());

    holder.numberofExercises.setText(programTrackers.get(position).getProgramTrackers().size() + " exercise/s");
    boolean isFinished = false;
    final int sublistSize = programTrackers.get(position).getProgramTrackers().size();
    for (int i = 0; i < sublistSize; i++) {
        if (programTrackers.get(position).getProgramTrackers().get(i).isProgramExerciseFinished()) {
            isFinished = true;

}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    TextView dayTxt, exerciseCompleted, numberofExercises;
    CardView dayCard;

    public ViewHolder(View itemView) {

        super(itemView);

        dayTxt = itemView.findViewById(R.id.dayTxt);
        exerciseCompleted = itemView.findViewById(R.id.exerciseCompleted);
        numberofExercises = itemView.findViewById(R.id.numberofExercises);
        dayCard = itemView.findViewById(R.id.dayCard);
        dayCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ((StartProgramActivity) context).setWeekExercisesData(getAdapterPosition());
                ArrayList<ProgramTracker> programTrackerWrappers = ((StartProgramActivity) context).getDayOfWeekExercises();
                if (programTrackerWrappers.size() > 0) {
                    context.startActivity(new Intent(context.getApplicationContext(), DayExerciseActivity.class).putExtra("programExercises", programTrackerWrappers));

                }else {
                    CustomToast customToast = new CustomToast(context);
                    customToast.setTextColor(context.getResources().getColor(R.color.white));
                    customToast.setBackground(context.getResources().getColor(R.color.color_2));

                    customToast.showErrorToast("No exercises for this day.");
                }


            }
        });
    }


}
公共类UserProgramWeekAdapter扩展了RecyclerView.Adapter{
私人语境;
私有ArrayList程序跟踪器;
公共用户ProgramWeekAdapter(上下文上下文、ArrayList程序跟踪器){
this.context=上下文;
this.programTrackers=programTrackers;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.activity\u user\u program\u week\u adapter,parent,false);
ViewHolder ViewHolder=新的ViewHolder(视图);
返回视图持有者;
}
@凌驾
BindViewHolder上的公共无效(UserProgramWeekAdapter.ViewHolder,int位置){
Log.d(“UserProgramWeekAdapter”,“Day:”+programTrackers.get(position.getDay());
Log.d(“UserProgramWeekAdapter”,“Size:”+programTrackers.get(position).getProgramTrackers().Size());
holder.dayTxt.setText(programTrackers.get(position.getDay());
holder.numberofExercises.setText(programTrackers.get(position.getProgramTrackers().size()+“exercise/s”);
布尔值isFinished=false;
final int sublistSize=programTrackers.get(position.getProgramTrackers().size();
for(int i=0;i0){
startActivity(新意图(context.getApplicationContext(),DayExerciseActivity.class).putExtra(“programExercises”,ProgramTrackerRappers));
}否则{
CustomToast CustomToast=新的CustomToast(上下文);
customToast.setTextColor(context.getResources().getColor(R.color.white));
setBackground(context.getResources().getColor(R.color.color_2));
customToast.batherRoToast(“今天没有锻炼。”);
}
}
});
}
}
我得到的信息://error//

“DayExerciseActivity中的错误”

首先,您应该使用context而不是context.getApplicationContext,现在讨论这个问题 您正在putExtra中通过programTracker的Arrylist context.startActivity(新意图(context.getApplicationContext(),DayExerciseActivity.class).putExtra(“programExercises”,ProgramTrackerRappers));


我确信您在DayExerciseActivity中通过programExercise的ArrayList对其进行解析,这就是为什么您会出现此强制转换错误。因为programTracker无法强制转换到programExercise

您在哪一行出现此错误?您好,先生!我添加了一张我从哪里得到错误的照片。请检查与错误无关,但不要在用户界面的
Intent
中使用
context.getApplicationContext()
。使用简单的
context
您的错误位于
ProgramExercise
ProgramTracker
之间。请检查铸造方式,是否为
ProgramTracker
父类或类似类。
public class UserProgramWeekAdapter extends RecyclerView.Adapter<UserProgramWeekAdapter.ViewHolder> {

private Context context;
private ArrayList<ProgramTrackerWrapper> programTrackers;


public UserProgramWeekAdapter(Context context, ArrayList<ProgramTrackerWrapper> programTrackers) {
    this.context = context;
    this.programTrackers = programTrackers;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_user_program_week_adapter, parent, false);
    ViewHolder viewHolder = new ViewHolder(view);
    return viewHolder;

}

@Override
public void onBindViewHolder(UserProgramWeekAdapter.ViewHolder holder, int position) {
    Log.d("UserProgramWeekAdapter", "Day: " + programTrackers.get(position).getDay());
    Log.d("UserProgramWeekAdapter", "Size: " + programTrackers.get(position).getProgramTrackers().size());
    holder.dayTxt.setText(programTrackers.get(position).getDay());

    holder.numberofExercises.setText(programTrackers.get(position).getProgramTrackers().size() + " exercise/s");
    boolean isFinished = false;
    final int sublistSize = programTrackers.get(position).getProgramTrackers().size();
    for (int i = 0; i < sublistSize; i++) {
        if (programTrackers.get(position).getProgramTrackers().get(i).isProgramExerciseFinished()) {
            isFinished = true;

}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    TextView dayTxt, exerciseCompleted, numberofExercises;
    CardView dayCard;

    public ViewHolder(View itemView) {

        super(itemView);

        dayTxt = itemView.findViewById(R.id.dayTxt);
        exerciseCompleted = itemView.findViewById(R.id.exerciseCompleted);
        numberofExercises = itemView.findViewById(R.id.numberofExercises);
        dayCard = itemView.findViewById(R.id.dayCard);
        dayCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ((StartProgramActivity) context).setWeekExercisesData(getAdapterPosition());
                ArrayList<ProgramTracker> programTrackerWrappers = ((StartProgramActivity) context).getDayOfWeekExercises();
                if (programTrackerWrappers.size() > 0) {
                    context.startActivity(new Intent(context.getApplicationContext(), DayExerciseActivity.class).putExtra("programExercises", programTrackerWrappers));

                }else {
                    CustomToast customToast = new CustomToast(context);
                    customToast.setTextColor(context.getResources().getColor(R.color.white));
                    customToast.setBackground(context.getResources().getColor(R.color.color_2));

                    customToast.showErrorToast("No exercises for this day.");
                }


            }
        });
    }


}