У меня есть список, который я хочу обновить при нажатии на определенное имя.Это почти работает так, как я хочу.Я использую модификацию.
Только одна проблема, которую я не могу понять.Пробовал в течение нескольких часов.
Если я добавлю notifyDataSetChanged ();в onClick это не обновлять напрямую.Мне нужно вручную «перезагрузить» мой список.
OnLongНажмите, чтобы «школа» сменилась на School1.
Есть предложения?Сделал бы мой день.
Адаптер:
public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UsersViewHolder> {
private Context mCtx;
private List<User> userList;
//TESTING POSITION
public UsersAdapter(Context mCtx, List<User> userList) {
this.mCtx = mCtx;
this.userList = userList;
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_users, parent, false);
return new UsersViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final UsersViewHolder holder, final int position) {
final User user = userList.get(position);
holder.textViewName.setText(user.getName());
holder.textViewEmail.setText(user.getEmail());
holder.textViewSchool.setText(user.getSchool());
//TESTING POSITION
//Long-click - FOR SCHOOL1
holder.linearLayout.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//LONG CLICK FOR UTE
String school = ("SCHOOL1");
String email = user.getEmail();
String name = user.getName();
Call<LoginResponse> call = RetrofitClient.getInstance()
.getApi().updateStatus(
user.getId(),
email,
name,
school
);
call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
Toast.makeText(mCtx, ("Status change for: ") + user.getEmail(), Toast.LENGTH_SHORT).show();
holder.textViewSchool.setText("School1");
notifyDataSetChanged();
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
}
});
return true;
}
});
@Override
public int getItemCount() {
return userList.size();
}
class UsersViewHolder extends RecyclerView.ViewHolder {
TextView textViewName, textViewEmail, textViewSchool;
public LinearLayout linearLayout;
public UsersViewHolder(View itemView) {
super(itemView);
textViewName = itemView.findViewById(R.id.textViewName);
textViewEmail = itemView.findViewById(R.id.textViewEmail);
textViewSchool = itemView.findViewById(R.id.textViewSchool);
linearLayout = (LinearLayout) itemView.findViewById(R.id.linearLayout);
}
}
}
Это мой фрагмент:
public class UsersFragment extends Fragment {
private RecyclerView recyclerView;
private UsersAdapter adapter;
private List<User> userList;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.users_fragment, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
Call<UsersResponse> call = RetrofitClient.getInstance().getApi().getUsers();
call.enqueue(new Callback<UsersResponse>() {
@Override
public void onResponse(Call<UsersResponse> call, Response<UsersResponse> response) {
userList = response.body().getUsers();
adapter = new UsersAdapter(getActivity(), userList);
recyclerView.setAdapter(adapter);
}
@Override
public void onFailure(Call<UsersResponse> call, Throwable t) {
}
});
}
}