Обновление recyclerView внутри OnBindViewHolder его адаптера не работает? - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть список, который я хочу обновить при нажатии на определенное имя.Это почти работает так, как я хочу.Я использую модификацию.

Только одна проблема, которую я не могу понять.Пробовал в течение нескольких часов.

Если я добавлю 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) {

        }

    });
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...