Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
AlexLisman
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 5
#1

Как отловить longclick у AppWidgetHostView - Программирование Android

22.02.2013, 23:36. Просмотров 667. Ответов 5
Метки нет (Все метки)

Всем привет!
Делаю свой лаунчер. Вроде все не плохо, только вот проблема с сабжем.
У некоторых виджетов работает, но только по нажатию на оконтовку (выставлено по 5px вокруг.)
У нектороых никак не отлавливается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 23:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как отловить longclick у AppWidgetHostView (Программирование Android):

Edittext longclick и клавиатура
Проблема - в программе есть edittext по клику открывается клавиатура...

RecyclerView| LongClick| set(View.VISIBLE) на выбранном item?
Добрый день! подскажите пожалуйста как показать вьюшку только в той...

Как в виджете отловить, что экран повернулся
Во собственно и все. Какое событие нужно ловить? Спасибо.

Как отловить последние касание экрана (onTouchEvent)
Привет товарищи программисты :) Как отловить последние касание устройства? ...

Как отловить остановку приложения, если не срабатывает onDestroy
Иногда, например, если войти в меню последних запущенных приложений и нажать...

TableLayout как отловить значение строки по нажатию (для Android на Java)?
Я только начинающий, прошу помочь по возможность, уже 2 день ищу информацию так...

5
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.02.2013, 00:03 #2
ну видимо вы ставите лысынер на перент, а точ ивенты перехватывают чилды...
0
AlexLisman
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 5
23.02.2013, 02:41  [ТС] #3
Цитата Сообщение от V0v1k Посмотреть сообщение
ну видимо вы ставите лысынер на перент, а точ ивенты перехватывают чилды...
Да нет, не на парент. Да и попробовал на чайлда повесить, итог тот-же + вызывает ошибку в самом виджете.
Там явно не так все просто.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.02.2013, 02:47 #4
какую ошибку?
0
AlexLisman
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 5
23.02.2013, 02:50  [ТС] #5
Цитата Сообщение от V0v1k Посмотреть сообщение
какую ошибку?
Уже выключил комп, завтра посмотрю.
0
AlexLisman
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 5
26.02.2013, 03:16  [ТС] #6
В итоге нашел решение.

Собственно вот:

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class LauncherAppWidgetHost extends AppWidgetHost {
 
    public LauncherAppWidgetHost(Context context, int hostId) {
        super(context, hostId);
    }
    
    @Override
    protected AppWidgetHostView onCreateView(Context context, int appWidgetId,
            AppWidgetProviderInfo appWidget) {
        return new LauncherAppWidgetHostView(context);
    }
}
И

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
public class LauncherAppWidgetHostView extends AppWidgetHostView {
 
    private boolean mHasPerformedLongPress;
 
    private CheckForLongPress mPendingCheckForLongPress;
 
    private final LayoutInflater mInflater;
 
    public LauncherAppWidgetHostView(Context context) {
        super(context);
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    protected View getErrorView() {
        return mInflater.inflate(R.layout.appwidget_error, this, false);
    }
 
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // Consume any touch events for ourselves after longpress is triggered
        if (mHasPerformedLongPress) {
            mHasPerformedLongPress = false;
            return true;
        }
 
        // Watch for longpress events at this level to make sure
        // users can always pick up this widget
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                postCheckForLongClick();
                break;
            }
 
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                mHasPerformedLongPress = false;
                if (mPendingCheckForLongPress != null) {
                    removeCallbacks(mPendingCheckForLongPress);
                }
                break;
        }
 
        // Otherwise continue letting touch events fall through to children
        return false;
    }
 
    class CheckForLongPress implements Runnable {
        private int mOriginalWindowAttachCount;
 
        public void run() {
            if ((getParent() != null) && hasWindowFocus()
                    && mOriginalWindowAttachCount == getWindowAttachCount()
                    && !mHasPerformedLongPress) {
                if (performLongClick()) {
                    mHasPerformedLongPress = true;
                }
            }
        }
 
        public void rememberWindowAttachCount() {
            mOriginalWindowAttachCount = getWindowAttachCount();
        }
    }
 
    private void postCheckForLongClick() {
        mHasPerformedLongPress = false;
 
        if (mPendingCheckForLongPress == null) {
            mPendingCheckForLongPress = new CheckForLongPress();
        }
        mPendingCheckForLongPress.rememberWindowAttachCount();
        postDelayed(mPendingCheckForLongPress, ViewConfiguration.getLongPressTimeout());
    }
 
    @Override
    public void cancelLongPress() {
        super.cancelLongPress();
 
        mHasPerformedLongPress = false;
        if (mPendingCheckForLongPress != null) {
            removeCallbacks(mPendingCheckForLongPress);
        }
    }
}
0
26.02.2013, 03:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 03:16
Привет! Вот еще темы с решениями:

Как можно отловить событие что все дочерние вьюхи для моей загружены?
Привет. есть xml вида: <myView .....> <myView1 ..... /> <myView2...

Как отловить причину "unfortunately, application has stopped" на эмуляторе?
Приветствую всех! Помогите разобраться. Пытаюсь убрать заголовок ...

Как отловить событие снятия галочки как во внутренних Checkbox компонента
Есть такой составной компонент,предок которому TREEVIEW,надо обработать события...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru