it-swarm.com.ru

Android совместимость контекстная панель действий

Пытаясь следовать Руководству по дизайну Android, я сталкиваюсь с небольшим затруднением.

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

В Руководстве по проектированию предлагается использовать для этого контекстную панель действий, и это звучит совершенно так, как я задумал. Проблема в том, что я пытаюсь поддерживать совместимость в обратном направлении к API 7 (из-за того, что мой телефон сейчас 2.3.3). 

Я использую ActionBarSherlock , чтобы получить другие элементы панели действий, но я не могу понять, как заставить его запускать контекстную панель действий, и при этом я не выяснил, как произвольно добавлять кнопки в панель действий. в АБС. Я вижу, вы можете делать вкладки, так что, возможно, это ответ, но так как я пытаюсь разрешить множественный выбор, я не хочу иметь нормальное модальное контекстное меню.

25
Paul

Настройка контекстной панели действий аналогична настройке «обычных» элементов ActionBar в том, что касается XML. Этот пример в руководстве разработчика объясняет все это .

Чтобы использовать ActionBarSherlock, замените обратные вызовы Android по умолчанию на отредактированные обратные вызовы ActionBarSherlock (например, вместо Android.View.ActionMode, используйте com.actionbarsherlock.view.ActionMode).

16
Reinier

Это запоздалый ответ, но я думаю, что он поможет людям застрять. 

Открыть контекстную панель действий на самом деле довольно просто, в любой момент вашей деятельности вам просто нужно позвонить:

startActionMode(mActionModeCallback);

Если вы не в своей основной деятельности, как во фрагментах, вы можете получить ссылку с 

getSherlockActivity().startActionMode(mActionModeCallback);

и это обратный звонок

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback(){

    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
          MenuInflater inflater = mode.getMenuInflater();
          inflater.inflate(R.menu.actionbar_context_menu, menu);
          return true;
        }

    @Override
    public void onDestroyActionMode(ActionMode mode) {

    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_item1:
                return true;
            case R.id.menu_item2:
                //close the action mode
                //mode.finish();
                return true;
            default:
                mode.finish();
                return false;
       }
    }
};

Xml - это простое меню, похожее на панель действий:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">

<item Android:id="@+id/menu_item1"
      Android:icon="@drawable/ic_item1"
      Android:title="@string/ITEM1"
      Android:showAsAction="always|withText" />

<item Android:id="@+id/menu_item2"
      Android:icon="@drawable/ic_item2"
      Android:title="@string/ITEM2"
      Android:showAsAction="always|withText" />

22
sokie

ActionBarSherlock имеет собственную реализацию ActionMode, но вам придется вручную управлять его жизненным циклом, я написал tutorial об этом. 

2
orto gonaliy

Для длинного образца клика, пожалуйста, обратитесь к ссылкам ниже. Первый - это Java-код, необходимый для примера. И второе, как определить макет;

1
burak altundal

Я столкнулся с той же проблемой. Это было решено, когда я нашел эту ссылку . По сути, вы должны создать класс обратного вызова, который реализует ActionMode.Callback. В этом классе вы надуваете панель действий своей контекстной панелью действий. При каждом выборе (или длительном щелчке) вы запускаете обратный вызов, используя метод startActionMode. Смотрите ссылку для рабочего кода =]

EDIT: Есть также пример сэмплов Шерлока под /samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.Java

0
Alesqui

Я отвечу на вторую часть вашего вопроса. Вот пример того, как добавить любой экземпляр панели действий (кнопка в коде ниже) с библиотекой ActionBarSherlock:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

        refreshButton = (RotatingButton) LayoutInflater.from(this).inflate(R.layout.actionbar_customview_refresh, null);
        refreshButton.setOnClickListener(refreshButtonListener);

        MenuItem item = menu.add(0, Android.R.id.copy, 0, getString(R.string.actionbar_refresh));
        item.setActionView(refreshButton);
        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_activity_action_bar, menu);
}
0
Roman Minenok