Невозможно установить счетчик (заголовок) для контекстной панели действий - PullRequest
0 голосов
/ 06 июня 2019

Я хочу добавить счетчик вместо обычного заголовка при выборе элементов, например, если пользователь выбирает 2 элемента, заголовок кабины должен измениться на 2.

enter image description here

я пробовал установить 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;

Я видел много учебных пособий, где используется счетчик, но я не могу реализовать его внутри своего кода: (

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