Итак, у меня есть странная ошибка, которую, я думаю, я внес в свой код. Он включает в себя RecyclerView.
Поэтому, когда пользователь хочет удалить строку в моем приложении, должно произойти следующее:
- Пользователь долго нажимает на строку
- Удалить строку кнопка становится видимой.
- Пользователь нажимает кнопку, чтобы удалить строку.
- Отображается диалоговое окно подтверждения (это еще не реализовано, но должно быть простым).
- Если пользователь подтверждает, удалите строку из RecyclerView и обновите.
Теперь я могу получить шаги с 1 по 5, работающие для каждой строки ... Однако, если я удаляю более одной (обычно две) строк, что-то странное происходит, несколько строк вниз, появляется кнопка «Удалить проект», и если я долго нажимаю любую другую строку (и ту, о которой идет речь), видимые кнопки переворачиваются. (Если это имеет смысл?)
Как мне предотвратить это? Вот мой код:
MainActivity. java:
public class MainActivity extends AppCompatActivity implements ProjectListAdapter.ItemClickListener {
...
@Override
public void onItemLongClick(View view, int position) {
mPLA.onRowLongClick(position, mRV_ProjectList);
}
...
}
ProjectListAdapter. java:
public class ProjectListAdapter extends RecyclerView.Adapter<ProjectListAdapter.ViewHolder> {
...
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final in position) {
...
holder.b_deleteProject.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onButtonDeletePress(position);
}
});
}
...
public void onDeleteButtonPress(int position) {
if(getItem(position) != null) {
ProjectManager.getInstance().removeProject(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, ProjectManager.getInstance().getProjectListSize());
}
}
...
public void onRowLongClick(int position, RecyclerView rv) {
ViewHolder holder = (ViewHolder) rv.findViewHolderForAdapterPosition(position);
holder.setDeleteProjectButtonVisibility();
}
...
}
В классе ViewHolder в ProjectListAdapter. java имеет:
public void setDeleteProjectButtonVisibility() {
if(b_deleteProject.getVisibility() == Button.VISIBLE) { b_deleteProject.setVisibility(Button.GONE); }
else if (b_deleteProject.getVisibility() == Button.GONE) { b_deleteProject.setVisibility(Button.VISIBLE); }
else { b_deleteProject.setVisibility(Button.GONE); }
}
Это все, что я думаю, связано с этой проблемой, если это не так, я могу доказать дальнейший код.
Я почесываю голову в данный момент, как к тому, что вызывает это (весьма вероятно, что я что-то не так делаю).
Спасибо!