Страница 1 из 2

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

Добавлено: 18 ноя 2012, 23:00
damager82
В этом уроке:
- работаем с ActionMode


Click here to read this article!

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

Добавлено: 05 янв 2013, 11:48
denisneposeda
Подскажите как можно отследить. Есть 3 пункта меню в ActionMode...2 пункта должны работать только если выбран один элемент списка, а 3-ий пункт работает при любом выделении, или один пункт или несколько?

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

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

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

Добавлено: 21 фев 2013, 01:14
gera
у меня получилось так(предворительно засунул 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);
}

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

Добавлено: 25 мар 2013, 09:07
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

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

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

Добавлено: 18 июл 2013, 00:43
Dmitry88
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

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

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

Добавлено: 02 авг 2013, 19:39
Dmitry88
Разобрался, нужно было добавить

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

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

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

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

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

Добавлено: 25 сен 2013, 15:04
dusshes
В обработчик onChildClick у контрола ExpandableListView
засунул

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

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

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

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

Добавлено: 11 дек 2013, 12:15
парень
Проблема следующая.

ActionBarSherlock и ActionMode.

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

Я понимаю что вопрос скорее к Sherlock'у, но может кто сталкивался...

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

Добавлено: 11 дек 2013, 12:42
парень
http://androidperspective.wordpress.com ... -listview/

искал решение всю ночь и полдня... написал тут и сразу нашел...

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

Добавлено: 02 фев 2014, 23:45
Digetix
Как обработать нажатие на галку в левой части? Или убрать её вообще

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

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

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

Добавлено: 12 июл 2014, 13:46
Onregs
Моте кто знает, а как сделать свою обработку этой кнопки?

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

Добавлено: 19 ноя 2014, 15:19
Razor
При вызванном меню после поворота экрана не вызывается onDestroyActionMode? Значит это меню где-то продолжает существовать?

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

Добавлено: 23 сен 2015, 09:46
K_Vladimir
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

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

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

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

Добавлено: 23 сен 2015, 18:38
K_Vladimir
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;
    }
}

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

Добавлено: 23 сен 2015, 18:45
doter.ua
гугл: аннотация @Override

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

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