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

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

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

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

K_Vladimir писал(а):
doter.ua писал(а):гугл: аннотация @Override
В смысле добавить @Override в код?
Добавил, ничего не происходит. Она же не обязательна теперь..
У тебя есть onItemCheckedStateChanged(), но ошибка все равно появляется is not abstract and does not override abstract method onItemCheckedStateChanged(ActionMode,int,long,boolean)

З.Ы. при чем здесь "не обязательна"? Если ты переопределишь метод допустив опечатку в названии, то без аннотации это будет как обычный метод, а с аннотацией у родителя проверят наличие такого и IDE выдаст ошибку.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

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

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

Сообщение K_Vladimir » 23 сен 2015, 19:07

doter.ua писал(а):
K_Vladimir писал(а):
doter.ua писал(а):гугл: аннотация @Override
В смысле добавить @Override в код?
Добавил, ничего не происходит. Она же не обязательна теперь..
У тебя есть onItemCheckedStateChanged(), но ошибка все равно появляется is not abstract and does not override abstract method onItemCheckedStateChanged(ActionMode,int,long,boolean)

З.Ы. при чем здесь "не обязательна"? Если ты переопределишь метод допустив опечатку в названии, то без аннотации это будет как обычный метод, а с аннотацией у родителя проверят наличие такого и IDE выдаст ошибку.
Ок. С аннотацией пишет
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
Error:(50, 13) error: method does not override or implement a method from a supertype
Error:(56, 13) error: method does not override or implement a method from a supertype
Error:(61, 13) error: method does not override or implement a method from a supertype
Error:(67, 13) error: method does not override or implement a method from a supertype
Error:(71, 13) error: method does not override or implement a method from a supertype
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

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

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

Сообщение Razor » 24 сен 2015, 08:54

Сообщает тебе, что необходимо переопределить эти методы. Вообще, это ещё до компиляции должно быть известно (IDE подсвечивать должна).

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

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

Сообщение doter.ua » 24 сен 2015, 14:21

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

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

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

Сообщение K_Vladimir » 24 сен 2015, 19:06

Может меня не поняли, или я чего-то не понимаю.
У меня по уроку же всё работает. Просто хотел через support lib import android.support.v7.view.ActionMode;
Код я выше уже выкладывал.
Как её (lib) включишь так ничего не выходит. А методы я @overload как в уроке.
Просто я полагаю что ActionMode уже устарел. И тратить кучу времени на него, наверное, нет смысла.
А про эту ошибку написал, на случай если кто-то тоже на неё наткнётся. Чтоб знал, что он не одинок))))))
Всё равно спасибо за помощь всем отозвавшимся.

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

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() {

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

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

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

            @Override
            public void onDestroyActionMode(ActionMode mode) {
            }

            @Override
            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;
    }
}
P/S Razor, Кстати, это действительно до компиляции известно (подчёркнуто красным). Но AS, зараза, не позволяет copy-past сделать всплывающего текста ошибки.
Отсюда и компиляция )))))

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

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

Сообщение Razor » 25 сен 2015, 05:34

K_Vladimir писал(а):Кстати, это действительно до компиляции известно (подчёркнуто красным).
Вот если туда поставишь курсор и нажмёшь лампочку слева (или Alt+Enter), то IDE в выпадающем меню предложит тебе переопределить необходимые методы. :)

В классе android.support.v7.view.ActionMode они объявлены как абстрактные и тебе их необходимо переопределить.

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

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

Сообщение K_Vladimir » 27 сен 2015, 14:57

Razor писал(а):
K_Vladimir писал(а):Кстати, это действительно до компиляции известно (подчёркнуто красным).
Вот если туда поставишь курсор и нажмёшь лампочку слева (или Alt+Enter), то IDE в выпадающем меню предложит тебе переопределить необходимые методы. :)

В классе android.support.v7.view.ActionMode они объявлены как абстрактные и тебе их необходимо переопределить.
Спасибо, но после Alt+Enter AS добавляет следующее:

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

 @Override
            public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
                return false;
            }

            @Override
            public void onDestroyActionMode(android.view.ActionMode mode) {
            }

            @Override
            public void onItemCheckedStateChanged(android.view.ActionMode mode, int position, long id, boolean checked) {  
            }


Т.е. AS ЗАСТАВЛЯЕТ меня использовать в качестве параметров этих методов android.view.ActionMode mode (СТАРУЮ ЛИБУ)
А я-то хочу использовать в своём проекте библиотеку android.support.v7.view.ActionMode Иначе зачем она тогда вообще нужна????
Скажется ли это на совместимости? И здесь, на форуме, всегда все пишут "Используйте support lib".

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

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

Сообщение K_Vladimir » 28 сен 2015, 18:34

Кажется всё прояснилось!)))
Совместимость с версиями < API 7 нам не особо-то и нужна.
А использование библиотек
android.view.ActionMode;
android.app.FragmentManager;
android.app.Fragment;
и таких методов как getFragmentManager(); (Без Support)
Вовсе не так уж и плохо, каким мне показалось после урока 114 по support lib.
Почему-то я вбил себе в голову что нужно всегда упорно стремиться использовать support lib. И по другому - никак))

lexx
Сообщения: 4
Зарегистрирован: 10 май 2015, 23:55

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

Сообщение lexx » 10 июл 2016, 18:10

А точно в режиме CHOICE_MODE_MULTIPLE_MODAL можно setItemChecked'ом вызвать ActionMode? (в developer'e пиcано - The is only valid if the choice mode has been set to CHOICE_MODE_SINGLE or CHOICE_MODE_MULTIPLE).
У меня ни выделения на девайсе ни вызова при вызове setItemChecked не происходит.
Интересно есть ли какие либо варианты восстановления ActionMode после поворота etc?

Bino
Сообщения: 2
Зарегистрирован: 01 апр 2017, 14:25

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

Сообщение Bino » 01 апр 2017, 14:39

Что-то я не понял...

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

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
Когда мы уже успели создать такой файл? Если это опечатка и имелось в виду

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

getMenuInflater().inflate(R.menu.context, menu);
(А я сделал именно так) то у меня получается меню, которое дублирует контекстное меню. В общем эти элементы меню показываются всегда. Изначально как ActionBar, а по нажатию кнопки - как контекстное меню. Естественно работают эти итемы только в режиме контекстного меню.

P.S. Разобрался с тем что висит ActionBar. Нужно было наследоваться именно от Activity а не от AppCompatActivity как у меня по умолчанию. Просто опечатка получается в уроке.

masterprog1
Сообщения: 2
Зарегистрирован: 18 мар 2017, 18:45

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

Сообщение masterprog1 » 06 апр 2017, 19:59

А где R.menu.main?
На видео уроке есть, а реально отсутствует.
есть R.menu.context

Ответить