На самом деле я делаю некоторые изменения видимости для элементов, которые щелкаются в представлении переработчика.Но когда пользователь нажимает на один объект, а затем нажимает на другой объект, тогда предыдущий объект должен прийти в свое исходное состояние.Manager.findViewByPosition (position) работает нормально, если представление находится в фокусе экрана, но я не могу получить представление, если элемент не находится в текущем фокусе.Например: - пользователь нажимает на 1-й (позиция) элемент, затем нажимает на последнюю позицию, затем findViewByPosition возвращает ноль.
Пожалуйста, помогите и дайте мне знать, если есть какой-то другой способ сделать это.
Ожидаемым результатом должно быть представление последнего элемента, который должен быть обновлен, но этого не происходит для представлений, которые не находятся в текущем фокусе экрана.
Ниже приведен мой фрагмент кода.Обновлено с тем, что вы предложили.
public class BodyPartWithMmtRecyclerView extends
RecyclerView.Adapter<BodyPartWithMmtRecyclerView.ViewHolder>
{
//variables defined.
int selectedPosition = -1;
static class ViewHolder extends RecyclerView.ViewHolder {
//All the view items declared here.
ViewHolder(View view) {
super(view);
//All the views are defined here.
}
}
public BodyPartWithMmtRecyclerView(List<BodyPartWithMmtSelectionModel> bodyPartsList, Context context){
//array list initialization and shared preference variables initialization
}
public BodyPartWithMmtRecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//Creating a new view.
}
public void onBindViewHolder(@NonNull final BodyPartWithMmtRecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
BodyPartWithMmtSelectionModel bodyPartWithMmtSelectionModel = bodyPartsList.get(position);
holder.iv_bodypart.setImageResource(bodyPartWithMmtSelectionModel.getIv_body_part());
holder.tv_body_part_name.setText(bodyPartWithMmtSelectionModel.getExercise_name());
if(selectedPosition!=position && selectedPosition!=-1){
//updated the elements view to default view. Like made the visibility and other changes here.
}
//some click listeners on the sub-elements of the items. Like textviews, spinner, etc
holder.iv_bodypart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((BodyPartSelection)context).setFabVisible();
if(selectedPosition!=-1){
((BodyPartSelection)context).visibilityChanged(selectedPosition,position);
/*here what I was doing is whenever the user clicks on an item I check weather a previous item is clicked or not then if yes then I send the position to a function that makes it to default but the issue was that if the item is not in the focus of the screen the findViewByPosition returns null.*/
}
selectedPosition = position;
bodypartSelected = holder.tv_body_part_name.getText().toString();
holder.iv_bodypart.setVisibility(View.INVISIBLE);
holder.rl_left_right.setVisibility(View.VISIBLE);
}
});
//and other listeners below
}
@Override
public int getItemCount() {
return bodyPartsList==null?0:bodyPartsList.size();
}
@Override
public int getItemViewType(int position) {
return position;
}
}
Функция VisibilityChanged
public void visibilityChanged(int position, int clicked){
View view = manager.findViewByPosition(position);
if(view!=null) {
Log.i("inside","visibility change");
ImageView imageView = view.findViewById(R.id.bodypartImage);
//other elements and changing the visibility of elemets to default.
}
}