Форум программистов, компьютерный форум CyberForum.ru

Как отловить longclick у AppWidgetHostView - Android

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

Android Отловить нажатие кнопки Home
Как можно отловить событие что все дочерние вьюхи для моей загружены? Android
Android Как отловить остановку приложения, если не срабатывает onDestroy
Android Отловить изменение в EditText
Android Отловить нажатие кнопки Done
Отловить изменения в статус баре Android Java Android
AsyncTask, отловить нажатие кнопки Android
Android Как в виджете отловить, что экран повернулся
Android Как отловить причину "unfortunately, application has stopped" на эмуляторе?
Android Отловить блокировку экрана
TableLayout как отловить значение строки по нажатию (для Андроид на java) Android
Edittext longclick и клавиатура Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.02.2013, 00:03     Как отловить longclick у AppWidgetHostView #2
ну видимо вы ставите лысынер на перент, а точ ивенты перехватывают чилды...
AlexLisman
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 5
23.02.2013, 02:41  [ТС]     Как отловить longclick у AppWidgetHostView #3
Цитата Сообщение от V0v1k Посмотреть сообщение
ну видимо вы ставите лысынер на перент, а точ ивенты перехватывают чилды...
Да нет, не на парент. Да и попробовал на чайлда повесить, итог тот-же + вызывает ошибку в самом виджете.
Там явно не так все просто.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.02.2013, 02:47     Как отловить longclick у AppWidgetHostView #4
какую ошибку?
AlexLisman
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 5
23.02.2013, 02:50  [ТС]     Как отловить longclick у AppWidgetHostView #5
Цитата Сообщение от V0v1k Посмотреть сообщение
какую ошибку?
Уже выключил комп, завтра посмотрю.
AlexLisman
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 5
26.02.2013, 03:16  [ТС]     Как отловить longclick у AppWidgetHostView #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);
        }
    }
}
Yandex
Объявления
26.02.2013, 03:16     Как отловить longclick у AppWidgetHostView
Ответ Создать тему
Опции темы

Текущее время: 23:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru