Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Gourmand
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 65
#1

Как вызвать postInvalidate() из static метода? - Программирование Android

01.12.2016, 23:23. Просмотров 278. Ответов 13
Метки нет (Все метки)

Мне надо из static метода некоего класса (вызывается из native-приложения на Qt) вызвать обновление экрана Android. Метод строго static, по-другому быть не может. Я могу получить Activity и Context, но не нашёл способ получить глобальный View, чтобы вызвать postInvalidate(). Или может быть, есть другой способ заставить экран перерисоваться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2016, 23:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вызвать postInvalidate() из static метода? (Программирование Android):

Как вызвать private class из public метода - Программирование Android
Задача обновить блок try..catch после возобновления Painting'a private class LoadFeedTaskUrl extends AsyncTask<URL, Void,...

Где хранятся static переменные метода в java - Программирование Android
Подскажите пожалуйста, где хранятся локальные переменные static метода в java

.NET 3.x Как изменить свойство non-static объекта из static метода - C# ASP.NET
Понимаю, что такое не задумано средствами Net Framework, но у меня из-за этого не работает одна фишка, которую я месяц писал, вообщем у...

Как обратится к non static property из static метода - C#
День добрый, сразу вопрос static - как правильно статический или статичный? У меня есть некий метод, у которого есть статичный метод...

Обращение к не static базе данных из static-метода - C#
Есть у меня БД .sqlite . Она создаётся из не static метода: public IDbConnection database; public void SetupDb() { ...

Как вызвать static метод? - C#
Здравствуйте, есть у меня например такое: class Example { static void Main(string arg) { } } static class Ex ...

13
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
02.12.2016, 12:09 #2
Gourmand, вы работаете в QT?
0
Gourmand
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 65
02.12.2016, 12:53  [ТС] #3
С Qt, вторая буква прописная. С заглавной T - это Apple QuickTime.

Но в данном случае не существенно - я вызываю из Qt приложения Native метод на Java. Метод может быть только static. Из него нужно обновить экран. В Qt нет функции обновления экрана вне окон приложения. Поэтому вопрос не имеет отношения к Qt - это вопрос исключительно об Android. Поэтому мой ответ на ваш вопрос - нет. Я пишу функцию на Java в Android.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
02.12.2016, 13:12 #4
что мешает создать класс со статическим полем Context context;
при старте приложения записать в это поле ссылку на контекст, а потом вызывать свои статик методы, которые будут использовать поле context
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
02.12.2016, 13:19 #5
Паблито, ему нужен грааль глобальный View
0
Gourmand
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 65
02.12.2016, 13:23  [ТС] #6
Паблито, у меня нет проблемы получить Context. Но он мне не нужен. Мне нужен View. Мне нужно вызвать обновление всего экрана, а не приложения. С приложением я внутри Qt прекрасно справляюсь.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
02.12.2016, 13:25 #7
в активити есть getWindow().getDecorView();
не оно?
0
Gourmand
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 65
02.12.2016, 13:55  [ТС] #8
Паблито, ещё раз - мне не нужно обновлять окно моего приложения. Мне нужно обновить десктоп.

PS:
Попробовал getWindow().getDecorView().postInvalidate(); - не даёт нужный эффект, десктоп не обновляется.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
02.12.2016, 14:01 #9
ясное дело, если каждая программа будет обновлять по своему желанию десктоп ...
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
02.12.2016, 14:09 #10
Паблито, Gourmand, а если... показать свое прозрачное окно и скрыть его ?
0
Gourmand
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 65
02.12.2016, 14:14  [ТС] #11
vxg, можно попробовать.

PS: нет, не работает, ничего не изменяется.
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
02.12.2016, 14:30 #12
Gourmand, ну а если на вашем прозрачном экране будет маленькая точечка ? и как вы определяете что ничего не изменилось? что должно вообще произойти? почему приложение само не обслуживает обновление своего экрана, а требует пинка со стороны?
0
Gourmand
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 65
03.12.2016, 01:44  [ТС] #13
vxg, приложение Qt само по определению обслуживает только свои окна. Экран ОС - это не Qt-епархия, поэтому я привинчиваю static функцию, которая должна обновить экран. Это политика мультиплатформенности. Я вижу, что ничего не изменилось, потому что поведение такое же, как и было изначально.

Но появилась мысль... надо поиграться попозже...
0
Gourmand
1 / 1 / 1
Регистрация: 29.01.2015
Сообщений: 65
05.12.2016, 22:29  [ТС] #14
Тут при решении смежной задачи (надо передавать тапы и жесты в свободные области экрана Android) должен получиться некий View myView, который по идее развернут на весь экран и при этом прозрачен. Может быть, если его удастся создать, то вызов для него postInvalidate() обновит всё под ним? Но пока не ясно, как создать и его - нужно указать идентификатор ID layout приложения, а не ясно где и как его узнать. По разным источникам скомпоновал такой код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public void onCreate(Bundle b){
        super.onCreate(b);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                        WindowManager.LayoutParams.TYPE_PHONE,
                        WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
                        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                        PixelFormat.TRANSLUCENT);
        wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        myView = inflater.inflate(R.layout.activity_main, null);
        wm.addView(myView, params);
    }
 
    public void onDestroy() {
        super.onDestroy();
        if(myView != null)
        {
            ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(myView);
            myView = null;
        }
    }
Но на R.layout.activity_main ругается, а что там должно быть в Qt-приложении - не ясно. Примеры не нахожу.
0
05.12.2016, 22:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2016, 22:29
Привет! Вот еще темы с ответами:

Как вызвать static метод из типа dynamic - C#
К примеру есть класс в одной программе: namespace ConsApp_VerifyText { public class TextHelper { /// <summary> ...

Вызов public метода public класса внутри static метода static класса - C#
Подскажите, пожалуйста, возможен вызов не статического метода не статического класса внутри статического метода статического класса? ...

Как обратиться к свойству объекта WPF из метода static класса? - C# WPF
Как обратиться к свойству объекта WPF из метода static класса? Есть окно с меню, надписью и кнопкой <Window...

Как вызвать из метода метод? - C++
Здравствуйте. Прошу Вас помочь. Как мне вызвать из метода Set метод Draw? Мне надо передать объект A в Draw (у которого есть координаты x и...


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

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

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