Чтобы подвести итог моего приложения, у меня есть RecyclerView
, размер которого является динамическим и относительно переменной ViewModel
(когда эта переменная изменяется, список элементов RecyclerView увеличивается или уменьшается соответственно).
В каждом ряду есть пара кнопок.Каждая из этих кнопок имеет OnClickListener
.(При нажатии кнопка исчезает).
Проблема: При нажатии кнопки исчезает не только эта кнопка, но также исчезает каждый дополнительный кратный 7 (по индексу).
Например: вы нажимаете кнопку в строке 1, и то же самое происходит в строках 8, 15 и 22, даже если вы нажали только строку 1.
Я сейчас прохожупрослушиватель через метод onViewCreated
моего фрагмента к закрытой переменной прослушивателя в адаптере (набор слушателей в конструкторе).
Я покажу соответствующие биты моего фрагмента и адаптера:
Фрагмент:
public class MyFragment extends Fragment {
private MyModel model;
private ArrayList<Data> dataList;
private int numberOfDataItems;
private RecyclerView content;
private RecycleAdapter adapter;
private View.OnClickListener onItemClickLIstener = new View.OnClickListener() {
@Override
public void onClick(View view) {
RecyclerAdapter.ViewHolder viewHolder = (RecyclerAdapter.ViewHolder) view.getTag();
// This is the buggy bit
viewHolder.myButton.setVisibility(View.GONE);
int position = viewHolder.getAdapterPosition();
Data data = dataList.get(position);
// TODO: eventually do some logic here with the data
}
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
content = view.findViewById(R.id.content);
model.createDataList(numberOfDataItems);
dataList = model.getDataList();
adapter = new RecycleAdapter(dataList);
content.setAdapter(adapter);
content.setLayoutManager(new LinearLayoutManager(getContext()));
adapter.setOnItemClickListener(onItemClickListener);
}
}
Адаптер:
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.ViewHolder> {
private List<Data> dataList;
private View.OnClickListener onItemClickListener;
public class ViewHolder extends RecyclerView.ViewHolder {
public Button myButton;
public ViewHolder(View itemView) {
super(itemView);
myButton = itemView.findViewById(R.id.myButton);
myButton.setTag(this);
myButton.setOnClickListener(onItemClickListener);
}
}
@Override
public RecycleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context conext = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View DataView = inflater.inflate(R.layout.data_layout, parent, false);
return new ViewHolder(dataView);
}
@Override
public void onBindViewHolder(@NonNull RecycleAdapter.ViewHolder viewHolder, int position) {
Data data = dataList.get(position);
// Do stuff with data
myButton.setText(data);
}
public void setOnItemClickListener(View.OnClickListener itemClickListener) {
onItemClickListener = itemClickListener;
}
}