У меня есть настройка-просмотрщика, которая извлекает информацию с сервера MYSQL через RetroFit.Последний этап заключается в реализации прослушивателя по щелчку, поэтому, когда пользователь нажимает на карту просмотра переработчика, он выводит их на страницу со всей информацией.
Я следую учебному пособию CodingwithMitch https://www.youtube.com/watch?v=69C1ljfDvl0&list=PLceqSj9t5VtrkGKncLPaskYDTK5XkNN13&index=24&t=0s
Я прошел весь путь до конца, когда мне нужно было обновить адаптер, и я застрял с ошибкой, утверждающей, что параметры конструктора не совпадают.Для получения дополнительной информации см. Код на странице «Адаптер» и «Фрагмент».
Страница ADAPTER:
public class WorkoutLogAdapter extends RecyclerView.Adapter<WorkoutLogAdapter.WorkoutLogViewHolder>{
private Context mContext;
private List<WorkoutLogList> mWorkoutLogList;
private OnLogListener mOnLogListener;
public WorkoutLogAdapter(Context context, List<WorkoutLogList> mWorkoutLogList, OnLogListener onLogListener){
this.mContext = context;
this.mWorkoutLogList = mWorkoutLogList;
this.mOnLogListener = onLogListener;
}
/**
* Method which contains the display i.e Cards!
* @param parent
* @param viewType
* @return
*/
@NonNull
@Override
public WorkoutLogViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_workoutlog, parent, false);
return new WorkoutLogViewHolder(v, mOnLogListener);
}
/**
* Method which controls the position of the item arraylist in the viewholder.
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(@NonNull WorkoutLogViewHolder holder, int position) {
WorkoutLogList workoutLogList = mWorkoutLogList.get(position);
holder.mTitle.setText(workoutLogList.getAlternativeThought());
}
/**
* Method which makes our recycler list the same size as our arraylist of items.
* @return
*/
@Override
public int getItemCount() {
return mWorkoutLogList.size();
}
public class WorkoutLogViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView mTitle;
OnLogListener onLogListener;
public WorkoutLogViewHolder(@NonNull View itemView, OnLogListener onLogListener) {
super(itemView);
mTitle = itemView.findViewById(R.id.titleWorkoutLog);
this.onLogListener = onLogListener;
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
onLogListener.onLogClick(getAdapterPosition());
}
}
/**
*
*/
public interface OnLogListener{
void onLogClick(int position);
}
Страница FRAGMENT:
public class WorkoutLogFragment extends Fragment implements WorkoutLogAdapter.OnLogListener {
private SharedPreferences loginPref;
private RecyclerView mRecyclerView;
private WorkoutLogAdapter mWorkoutLogAdapter;
private List<WorkoutLogList> mWorkoutLogList;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_workout_log, container, false);
}
@Override
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
loginPref = getContext().getSharedPreferences("loginPref", Context.MODE_PRIVATE);
final int userId = loginPref.getInt("userId", 0);
mRecyclerView = view.findViewById(R.id.mRecyclerView);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
Call<List<WorkoutLogList>> call = RetrofitClient.getInstance().getApi()
.getLogs(userId);
call.enqueue(new Callback<List<WorkoutLogList>>() {
@Override
public void onResponse(Call<List<WorkoutLogList>> call, Response<List<WorkoutLogList>>response) {
mWorkoutLogList = response.body();
mWorkoutLogAdapter = new WorkoutLogAdapter(getActivity(), mWorkoutLogList, this);
mRecyclerView.setAdapter(mWorkoutLogAdapter);
}
@Override
public void onFailure(Call<List<WorkoutLogList>> call, Throwable t) {
}
});
}
@Override
public void onLogClick(int position) {
mWorkoutLogList.get(position);
Fragment workoutLogFragment = new HomeFragment();
FragmentTransaction workoutLogTransaction = getActivity().getSupportFragmentManager().beginTransaction();
workoutLogTransaction.replace(R.id.fragment_container, workoutLogFragment);
workoutLogTransaction.commit();
}
}
Эта строка из класса Fragment выбрасывает красную строку mWorkoutLogAdapter = new WorkoutLogAdapter (getActivity (), mWorkoutLogList, this);Он не должен принимать параметр "this" в конце.Я последовал за Митчем, обращенным к письму.Это работает у него, однако он использует MYSQL lite в видео, где я использую Retrofit Call.Так что я уверен, что мне нужно каким-то образом изменить конструктор, но я не знаю как.Может кто-нибудь, пожалуйста, помогите мне изменить код, чтобы он работал.