Я хочу добавить счетчик вместо обычного заголовка при выборе элементов, например, если пользователь выбирает 2 элемента, заголовок кабины должен измениться на 2.
я пробовал установить actionMode.setTitle(String.valueOf(counter))
, где selected_items_list
- это место, где добавляются все выбранные элементы, но ему просто присвоено значение 0
внутри onPrepareActionMode
.
Счетчик увеличивается, когда вызывается метод Update
inside TextViewHolder
(внутри слушателей onClick
).Я использую RecyclerView, ниже ViewHolder и ActionMode.Callback.
CAB содержит только два элемента / элемента: кнопки удаления и обмена.
EDIT
Перемещено actionMode.setTitle()
внутри Update
метод (TextViewholder
).название изменяется на количество выбранных элементов.теперь узнаю, как уменьшаться, когда элементы отменяются.
ViewHolder
public class TextViewHolder extends ViewHolder {
// each data item is just a string in this case
private TextView titolo;
private TextView ora;
private RelativeLayout selezione_layout_testo;
public TextViewHolder(View v) {
super(v);
titolo = itemView.findViewById(R.id.testo);
selezione_layout_testo =
itemView.findViewById(R.id.layout_selezione_testo); //This element
is root view of the items
ora = itemView.findViewById(R.id.ora);
}
void selectItem(ModelloDati item) {
if (multiSelect) {
if (selected_items_list.contains(item)) {
selected_items_list.remove(item);
if(selected_items_list.size()==0)
{
if (actionMode != null ){
actionMode.finish();
}
}
selezione_layout_testo.setBackgroundColor(
context.getResources().getColor(R.color.transparent));
} else {
selected_items_list.add(item);
selezione_layout_testo.setBackgroundColor(
context.getResources().getColor(R.color.Colore_selezione));
}
}
}
void update(final ModelloDati value) {
if (selected_items_list.contains(value)) {
selezione_layout_testo.setBackgroundColor(
context.getResources().getColor(R.color.Colore_selezione));
} else {
selezione_layout_testo.setBackgroundColor(
context.getResources().getColor(R.color.transparent));
}
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
actionMode =
((AppCompatActivity)view.getContext()).startSupportActionMode(
actionModeCallback);
selectItem(value);
//-------------- EDITED!!!
String counter_string = String.valueOf(counter);
actionMode.setTitle(counter_string);
return true;
}
});
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
counter++;
selectItem(value);
}
});
}
}
ActionMode.Callback
private ActionMode.Callback actionModeCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(final ActionMode actionMode, Menu menu)
{
multiSelect = true;
actionMode.getMenuInflater().inflate(R.menu.action_bar_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(
ActionMode actionMode, MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.delete:
for(ModelloDati oggetto : selected_items_list)
{
if(oggetto.getTYPE() == tlTEXT)
data_list.remove(data_list.indexOf(oggetto)-1);
data_list.remove(oggetto);
}
actionMode.finish();
return true;
case R.id.share:
//Do nothing
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
multiSelect = false;
selected_items_list.clear();
notifyDataSetChanged();
counter = 0;
}
};
Переменные
private ArrayList<ModelloDati> data_list;
private ArrayList<ModelloDati> selected_items_list = new ArrayList<>();
private Context context;
private static final int tlTEXT = 0;
private boolean multiSelect = false;
private ActionMode actionMode;
private int counter = 0;
Я видел много учебных пособий, где используется счетчик, но я не могу реализовать его внутри своего кода: (