Урок 113. Android 3. ActionMode, как альтернатива контекстному меню

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 113. Android 3. ActionMode, как альтернатива контекстному меню

Сообщение damager82 » 18 ноя 2012, 23:00

В этом уроке:
- работаем с ActionMode


Click here to read this article!
Последний раз редактировалось damager82 25 май 2017, 13:36, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

denisneposeda
Сообщения: 19
Зарегистрирован: 30 дек 2012, 10:43

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение denisneposeda » 05 янв 2013, 11:48

Подскажите как можно отследить. Есть 3 пункта меню в ActionMode...2 пункта должны работать только если выбран один элемент списка, а 3-ий пункт работает при любом выделении, или один пункт или несколько?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение damager82 » 14 янв 2013, 10:47

denisneposeda писал(а):Подскажите как можно отследить. Есть 3 пункта меню в ActionMode...2 пункта должны работать только если выбран один элемент списка, а 3-ий пункт работает при любом выделении, или один пункт или несколько?
В списке определяйте, сколько элементов выделено, как-нить передавайте эту инфу объекту mode и перерисовывайте его (думаю, что invalidateOptionsMenu сработает).
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

gera
Сообщения: 9
Зарегистрирован: 11 окт 2012, 23:30

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение gera » 21 фев 2013, 01:14

у меня получилось так(предворительно засунул 2 первых пункта меню в группу с id = groupTwoItems)

Код: Выделить всё

public void onItemCheckedStateChanged(ActionMode mode, int position,
		long id, boolean checked) {
	int itemCount = lvActionMode.getCheckedItemCount();
	if (itemCount > 1) {
		mode.getMenu().setGroupVisible(R.id.groupTwoItems, false);
	} else {
		mode.getMenu().setGroupVisible(R.id.groupTwoItems, true);
	}
	
	Log.d(LOG_TAG, "position = " + position + ", checked = " + checked);
}

Serious
Сообщения: 22
Зарегистрирован: 18 мар 2013, 13:45

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение Serious » 25 мар 2013, 09:07

Здравствуйте.
Если подставить в Адаптер свой view, то множественный выбор не работает.
Что необходимо сделать чтоб работал множественный выбор со своим view?

upd: Судя по логам множественный выбор работает:

D/myLogs(595): position = 4, checked = true
D/myLogs(595): position = 5, checked = true
D/myLogs(595): position = 5, checked = false
D/myLogs(595): position = 3, checked = true

Но визуально выделения нет.

Dmitry88
Сообщения: 16
Зарегистрирован: 14 июл 2013, 12:22
Откуда: Москва

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение Dmitry88 » 18 июл 2013, 00:43

Serious писал(а):Здравствуйте.
Если подставить в Адаптер свой view, то множественный выбор не работает.
Что необходимо сделать чтоб работал множественный выбор со своим view?

upd: Судя по логам множественный выбор работает:

D/myLogs(595): position = 4, checked = true
D/myLogs(595): position = 5, checked = true
D/myLogs(595): position = 5, checked = false
D/myLogs(595): position = 3, checked = true

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

Dmitry88
Сообщения: 16
Зарегистрирован: 14 июл 2013, 12:22
Откуда: Москва

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение Dmitry88 » 02 авг 2013, 19:39

Разобрался, нужно было добавить

Код: Выделить всё

android:background="?android:attr/activatedBackgroundIndicator"
в файл XML, используемого в качестве пункта списка)

dusshes
Сообщения: 23
Зарегистрирован: 25 сен 2013, 14:23

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение dusshes » 25 сен 2013, 14:36

Пытаюсь по этому примеру сделать ExpandableListView с мульти-выбором и ActionMode.
Использую свой адаптер для child-ов.
Спасибо Dmitry88, выбранные строки теперь подсвечиваются.
Проблема в другом.
Длинным нажатием выбирается элемент и появляется ActionMode.
Все как надо.
Но вот короткие нажатия на другие элементы не приводят к выбору элемента. Остается один выбранный элемент.
Обработчик onItemCheckedStateChanged не отрабатывает (При первом длинном нажатии он отработал).
Если в этот момент выполнить
elv.setItemChecked(1, true);
то вторая строчка прекрасно добавляется к уже выделенной.
И обработчик onItemCheckedStateChanged отрабатывает.
Как добиться, чтобы ExpandableListView работал также как ListView в уроке?

dusshes
Сообщения: 23
Зарегистрирован: 25 сен 2013, 14:23

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение dusshes » 25 сен 2013, 15:04

В обработчик onChildClick у контрола ExpandableListView
засунул

Код: Выделить всё

elv.setItemChecked(elv.getPositionForView(v), !elv.isItemChecked(elv.getPositionForView(v)));
Получилось подобие чего хотелось. Можно правда вставить проверку что режим выбора элементов включен (ActionMode активирован), но без проверки даже больше нравится. Выделение начинается даже по короткому нажатию.

Очень хочется разобраться почему не работает как на уроке, само без подпинывания.

парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение парень » 11 дек 2013, 12:15

Проблема следующая.

ActionBarSherlock и ActionMode.

Если делать по уроку с просто вызовом ActionMode, то все работает. (необходимо только менять Activity на SherlockActivity и пр...)
Но если делать как с множественным выбором то не не работает... точнее эклипс не пускает запустить. ругается на обработчик... и предлагает создать методы сам в которых делает Menu,MenuItem наследником Android.View.* а Надо Sherlock.View.*.
И допустим мы ему позволяем это сделать... Но тогда Ничего не происходит. Что жми что не жми.

Я понимаю что вопрос скорее к Sherlock'у, но может кто сталкивался...
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение парень » 11 дек 2013, 12:42

http://androidperspective.wordpress.com ... -listview/

искал решение всю ночь и полдня... написал тут и сразу нашел...
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение Digetix » 02 фев 2014, 23:45

Как обработать нажатие на галку в левой части? Или убрать её вообще

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение klblk » 03 фев 2014, 05:46

Digetix писал(а):Как обработать нажатие на галку в левой части? Или убрать её вообще
При нажатии срабатывает onDestroyActionMode.
чтобы убрать можно попробывать что-то из этого: http://stackoverflow.com/questions/1496 ... actionmode

Onregs
Сообщения: 5
Зарегистрирован: 26 май 2014, 20:48

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение Onregs » 12 июл 2014, 13:46

Моте кто знает, а как сделать свою обработку этой кнопки?

Razor
Сообщения: 10
Зарегистрирован: 13 окт 2014, 13:58

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение Razor » 19 ноя 2014, 15:19

При вызванном меню после поворота экрана не вызывается onDestroyActionMode? Значит это меню где-то продолжает существовать?

K_Vladimir
Сообщения: 36
Зарегистрирован: 28 июн 2015, 03:13

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение K_Vladimir » 23 сен 2015, 09:46

1. Тоже заметил, что при повороте экрана включённый ActionMode пропадает, а onDestroy в логе не появляется.
2. Ещё почему-то 3-й пункт меню никогда не показывается, хотя места, вроде полно. Даже когда поменял атрибут на app:showAsAction="always|withText"
3-й пункт не появился.
3. При использовании либы import android.support.v7.view.ActionMode; вместо import android.view.ActionMode;
выделяет красным new MultiChoiceModeListener в строке lvActionMode.setMultiChoiceModeListener(new MultiChoiceModeListener() {........
Так и не разобрался как это починить.
Пришлось отказаться от использования support lib

Razor
Сообщения: 10
Зарегистрирован: 13 окт 2014, 13:58

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение Razor » 23 сен 2015, 13:19

K_Vladimir писал(а): 3. При использовании либы import android.support.v7.view.ActionMode; вместо import android.view.ActionMode;
выделяет красным new MultiChoiceModeListener в строке lvActionMode.setMultiChoiceModeListener(new MultiChoiceModeListener() {........
Так и не разобрался как это починить.
Пришлось отказаться от использования support lib
А что пишет?

K_Vladimir
Сообщения: 36
Зарегистрирован: 28 июн 2015, 03:13

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение K_Vladimir » 23 сен 2015, 18:38

Razor писал(а):
K_Vladimir писал(а): 3. При использовании либы import android.support.v7.view.ActionMode; вместо import android.view.ActionMode;
выделяет красным new MultiChoiceModeListener в строке lvActionMode.setMultiChoiceModeListener(new MultiChoiceModeListener() {........
Так и не разобрался как это починить.
Пришлось отказаться от использования support lib
А что пишет?
Пишет при компиляции: Error:(48, 79) error: <anonymous com.vladimir.kushnarev.p1131_actionmode.MainActivity$1> is not abstract and does not override abstract method onItemCheckedStateChanged(ActionMode,int,long,boolean) in MultiChoiceModeListener

Код: Выделить всё

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ActionMode;
import android.util.Log;
//import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class MainActivity extends AppCompatActivity {

    //////////  Вариант для списка ListView
    ActionMode actionMode;
    ListView lvActionMode;
    final String LOG_TAG = "myLogs";

    String[] data = { "one", "two", "three", "four", "five" };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_activated_1, data);
        lvActionMode = (ListView) findViewById(R.id.lvActionMode);
        lvActionMode.setAdapter(adapter);
        lvActionMode.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        lvActionMode.setMultiChoiceModeListener(new MultiChoiceModeListener() {

            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                mode.getMenuInflater().inflate(R.menu.context, menu);
                return true;
            }

            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                mode.finish();
                return false;
            }

            public void onDestroyActionMode(ActionMode mode) {
            }

            public void onItemCheckedStateChanged(ActionMode mode,
                                                  int position, long id, boolean checked) {
                Log.d(LOG_TAG, "position = " + position + ", checked = "
                        + checked);
            }
        });

    }

    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
}

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение doter.ua » 23 сен 2015, 18:45

гугл: аннотация @Override
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

K_Vladimir
Сообщения: 36
Зарегистрирован: 28 июн 2015, 03:13

Re: Урок 113. Android 3. ActionMode, как альтернатива контек

Сообщение K_Vladimir » 23 сен 2015, 18:57

doter.ua писал(а):гугл: аннотация @Override
В смысле добавить @Override в код?
Добавил, ничего не происходит. Она же не обязательна теперь..

Ответить