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

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

Войти
Регистрация
Восстановить пароль
 
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
#1

Как передавать динамические данные (координаты GPS) из активити в диалог? - Android

02.02.2016, 08:43. Просмотров 549. Ответов 19
Метки нет (Все метки)

Здравствуйте Уважаемые!

подскажите пожалуйста, есть класс активити в котором описана работа с GPS, и мне нужно вызывать диалог в котором будут отображаться постоянно меняющиеся координаты, как это сделать, через что(с помощью чего) их передавать?


Спасибо!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2016, 08:43     Как передавать динамические данные (координаты GPS) из активити в диалог?
Посмотрите здесь:

Android Убрать диалог о включении GPS и иконку GPS. Тихий запуск GPS
Android Подделать GPS координаты
Android GPS Location (GPS_PROVIDER) как получить координаты
Android Как сделать, чтобы данные, введенные в EditText, сохранялись и пополнялись в новом активити?
Как вызвать метод в активити классе из обычного не активити класса? Android
Координаты gps (структура) Android
Как передавать данные через USB Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
02.02.2016, 12:10     Как передавать динамические данные (координаты GPS) из активити в диалог? #2
disx, добрый день!
Подскажите, а диалог будет постоянно обновлять данные, пока показывается?
Если не забыл, данные можно передавать через setArguments.
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
02.02.2016, 12:12     Как передавать динамические данные (координаты GPS) из активити в диалог? #3
почему не сделать диалог слушателем для приема координат?
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
02.02.2016, 12:44  [ТС]     Как передавать динамические данные (координаты GPS) из активити в диалог? #4
CoolMind,
Подскажите, а диалог будет постоянно обновлять данные, пока показывается?
именно так, а setArguments это чей метод ?

Паблито,
почему не сделать диалог слушателем для приема координат?
как это, если подробно получится пояснить, то возможно подойдет,

т.е. нужно чтоб после вызова DialogFragment'a в нем отображались все изменения координат из активити в реальном времени?
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
02.02.2016, 12:49     Как передавать динамические данные (координаты GPS) из активити в диалог? #5
а почему сейчас активити слушает координаты, они ей нужны?
все те имплементации интерфейсов для приема координат можно просто реализовать в этом фрагменте
что тут еще подробно объяснять
_Night_Scream_
57 / 69 / 7
Регистрация: 08.08.2013
Сообщений: 560
02.02.2016, 12:53     Как передавать динамические данные (координаты GPS) из активити в диалог? #6
диалог случайно не AlertDialog?
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
02.02.2016, 13:24  [ТС]     Как передавать динамические данные (координаты GPS) из активити в диалог? #7
Паблито,
они ей нужны?
нужны для отображения местоположения на карте и статусов точности...

а в диалоге нужно чтоб дублировались данные когда он Resumed?

_Night_Scream_, не ..., DialogFragment.
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
02.02.2016, 13:34     Как передавать динамические данные (координаты GPS) из активити в диалог? #8
да можно по разному делать
1. когда прилетают новые координаты в активити - она вызывает какой-то метод у фрагмента и передает туда эти координаты, но перед вызовом надо проверять на null на всяки пожарный

2. повесить слушатель координат не только на активити, но и на фрагмент

но я бы делал первый вариант
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
02.02.2016, 13:46  [ТС]     Как передавать динамические данные (координаты GPS) из активити в диалог? #9
Паблито, да первый вариант и нужен,

она вызывает какой-то метод у фрагмента
вот я и не могу этого понять, какой метод (что он должен делать) и как активити его вызовет (если изменятся значения Longtitude и Latitude), или как?
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
02.02.2016, 13:52     Как передавать динамические данные (координаты GPS) из активити в диалог? #10
пишется свой класс, наследник от DialogFragment
в нем делается метод, например
Java
1
2
3
public void updateCoords(double latitude, double longitude) {
       textView.setText(latitude + "     " + longitude); // упрощенный пример
}
при создании диалог фрагмента, запоминаем ссылку на него и в методе активити, где прилетают координаты, вызываем
Java
1
if (dialog != null && dialog.isShowing()) dialog.updateCoords(long, lat); // или как там переменные называются
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
02.02.2016, 15:05  [ТС]     Как передавать динамические данные (координаты GPS) из активити в диалог? #11
Паблито, не дорубаю до конца

вот DialogFragment:
Кликните здесь для просмотра всего текста
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
public class GetDialGPS extends DialogFragment{
    
    TextView textView;
 
 
    public GetDialGPS() {
        // Empty constructor required for DialogFragment
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.getdialgps, container, false);
        textView = (TextView)view.findViewById(R.id.textView1); //сюда надо дать координаты из активити
//updateCoords();
 
        return view;
    }
 
    public void updateCoords(double latitude, double longitude) {
        textView.setText(latitude + "     " + longitude); // упрощенный пример
    }
 
 
}


вот Activity:
Кликните здесь для просмотра всего текста
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
public class MainActivity extends AppCompatActivity {
    android.support.v4.app.DialogFragment dlg1;
    private LocationManager manager;
    private TextView text;
    Button bt;
    GetDialGPS dialog;
    private LocationListener locListaner = new LocationListener() {
 
        public void onLocationChanged(Location argLocation) {
            printLocation(argLocation);
        }
 
        @Override
        public void onProviderDisabled(String arg0) {
            printLocation(null);
        }
 
        @Override
        public void onProviderEnabled(String arg0) {}
 
        @Override
        public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
    };
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        dlg1 = new GetDialGPS();
bt = (Button)findViewById(R.id.button);
 
        text = (TextView)findViewById(R.id.text);
 
        manager = (LocationManager)getSystemService(
                Context.LOCATION_SERVICE);
        manager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 0, 0, locListaner);
 
        Location loc = manager.getLastKnownLocation(
                LocationManager.GPS_PROVIDER);
        printLocation(loc);
    }
 
    private void printLocation(Location loc) {
        if (loc != null)
        {
            text.setText("Longitude:\t" + loc.getLongitude() +
                    "\nLatitude:\t" + loc.getLatitude());
 
            if (dialog != null && dialog.isVisible()) dialog.updateCoords(loc.getLongitude(), loc.getLatitude());
        }
        else {
            text.setText("Location unavailable");
        }
    }
 
    public  void onClick (View v){
        dlg1.show(getSupportFragmentManager(), "dlg1");
    }
}


где туплю как сделать?
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
02.02.2016, 16:01     Как передавать динамические данные (координаты GPS) из активити в диалог? #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Java
1
2
3
public void onLocationChanged(Location argLocation) {
            printLocation(argLocation);
        }
этот метод выводит координаты которые изменяются? если он работает то вместо этой строчки или после пишем
Java
1
if (dlg1!= null && dlg1.isShowing()) dlg1.updateCoords(argLocation.getLongtitude(), argLocation.getLatitude());
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
02.02.2016, 16:42  [ТС]     Как передавать динамические данные (координаты GPS) из активити в диалог? #13
Паблито, Респект тебе и уважуха,... а про такой способ передачи данных в диалог вообще не знал, так работает:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 private void printLocation(Location argLocation) {
        //printLocation(argLocation);
        if (argLocation != null)
        {
            text.setText("Longitude:\t" + argLocation.getLongitude() +
                    "\nLatitude:\t" + argLocation.getLatitude());
 
            if (dlg1 != null && dlg1.isVisible()) {
                dlg1.updateCoords(argLocation.getLongitude(), argLocation.getLatitude());
            }
        }
        else {
            text.setText("Location unavailable");
        }
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
02.02.2016, 16:51     Как передавать динамические данные (координаты GPS) из активити в диалог? #14
Цитата Сообщение от disx Посмотреть сообщение
такой способ передачи данных в диалог
не лучший, насколько я правильно помню. Передача данных между Activity и Fragment предпочтительно должна строиться на Listener'ах. Поэтому вы о нём и не знали.
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
02.02.2016, 17:02  [ТС]     Как передавать динамические данные (координаты GPS) из активити в диалог? #15
CoolMind,
Передача данных между Activity и Fragment предпочтительно должна строиться на Listener'ах
если есть возможность дополнить эту тему Вашим примером был бы очень рад узнать и о таком способе?
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
02.02.2016, 17:07     Как передавать динамические данные (координаты GPS) из активити в диалог? #16
Цитата Сообщение от CoolMind Посмотреть сообщение
Activity и Fragment предпочтительно должна строиться на Listener'ах. Поэтому вы о нём и не знали
ниче подобного, активити может вызывать методы фрагмента когда надо и сколько требуется
листенеры нужны если фрагменты получают данные от активити, другими словами - если передачу данных инициирует активити то листенеры не нужны, иначе - нужны

что бы не холиварить я дополню - сам я делаю всегда через интерфейсы или EventBus и стараюсь строить так что бы фрагмент когда надо вытягивал нужные данные из активити либо реагировал на события

но я сомневаюсь что ТС осилил такой подход
придет время - переделает и будет красиво и по феншую
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
02.02.2016, 18:27     Как передавать динамические данные (координаты GPS) из активити в диалог? #17
Цитата Сообщение от Паблито Посмотреть сообщение
листенеры нужны если фрагменты получают данные от активити, другими словами - если передачу данных инициирует активити то листенеры не нужны, иначе - нужны
Да.
Цитата Сообщение от Паблито Посмотреть сообщение
придет время - переделает и будет красиво и по феншую
Согласен. Тоже начинал без всяких интерфейсов, потом почитал несколько статеек, переделал.
Цитата Сообщение от disx Посмотреть сообщение
если есть возможность дополнить эту тему Вашим примером был бы очень рад узнать и о таком способе?
К сожалению, нет кода под рукой, да и основные моменты уже разобраны.
Вот вводная (сумбурная) статья на русском языке: http://startandroid.ru/ru/.../176-ur...vie-s-activity
Пока это всё вам не потребуется, только засорит знания. Потом, когда наткнётесь на грабли, может быть, почитаете. Также добавлю http://developer.android.com/guide/c...ngWithActivity, http://stackoverflow.com/questions/9...ainer-activity, остальные ссылки сходу не нашёл.
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 501
03.02.2016, 14:38  [ТС]     Как передавать динамические данные (координаты GPS) из активити в диалог? #18
Паблито,
но я сомневаюсь что ТС осилил такой подход
да Вы батенька меня недооценили вот и вариант через интерфейс и работает как хотел, спасибо:

MainActivity.java
Кликните здесь для просмотра всего текста
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
 //-------------Ынтерфейс----------------------
    public interface getCoordinatesEvent{
         void coordinatesEvent(String lo, String la, String ac);
    }
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getCoordinatesEvent coordinatesListener;
//        try {
//            coordinatesListener = (getCoordinatesEvent);
//        }catch (ClassCastException e){
//            throw new ClassCastException(activity.toString()+" Реализация getCoordinatesEvent")
//        }
        final String LOG_TAG = "myLogs";
        dlg1 = new GetDialGPS();
bt = (Button)findViewById(R.id.button);
 
        text = (TextView)findViewById(R.id.text);
 
        manager = (LocationManager)getSystemService(
                Context.LOCATION_SERVICE);
        manager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 0, 0, locListaner);
 
        Location loc = manager.getLastKnownLocation(
                LocationManager.GPS_PROVIDER);
        printLocation(loc);
 
 
    }
 
    private void printLocation(Location argLocation) {
        //printLocation(argLocation);
 
        if (argLocation != null)
        {
//------------------------закидываем данные в переменные метода Ынтерфейса---------------------
            //-------------------который реализуется в Диалоге------------------------
            Lon = String.valueOf(argLocation.getLongitude());
            Lat = String.valueOf(argLocation.getLatitude());
            Acc = String.valueOf(argLocation.getAccuracy());
 
                        if (dlg1 != null && dlg1.isVisible()) {
                            dlg1.coordinatesEvent(Lon,Lat,Acc);
            //    dlg1.updateCoords();
            }
//            if (dlg1 != null && dlg1.isVisible()) {
//
//            //    dlg1.updateCoords();
//            }
        }
        else {
            text.setText("Location unavailable");
        }
 
    }
 
    //coordinatesListener.coordinatesEvent(Lon, Lat, Acc);
    public  void onClick (View v){
        dlg1.show(getSupportFragmentManager(), "dlg1");
    }
}


DialogFragment.java
Кликните здесь для просмотра всего текста
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
public class GetDialGPS extends DialogFragment implements MainActivity.getCoordinatesEvent {
 
    TextView textView;
    String Longtitude="";
    String Latitude="";
    String Accuracy="";
    public GetDialGPS() {
        // Empty constructor required for DialogFragment
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.getdialgps, container, false);
        textView = (TextView)view.findViewById(R.id.textView1); //сюда надо дать координаты из активити
 
//updateCoords();
 
        return view;
    }
 
    @Override
    public void coordinatesEvent (String d, String e, String f){
 
        Longtitude=d;
        Latitude=e;
        Accuracy=f;
        textView.setText(Longtitude+" "+Latitude+" "+Accuracy); // и тута красиво бегают мои координаты :)
 
    }
 
 
}
Паблито
03.02.2016, 14:46
  #19

Не по теме:

по нормальному надо было вообще делать как я писал выше - сделать фрагмент слушателем координат, что бы он вообще ничего не спрашивал у активити
в onCreate берется LocationManager и создается аномимный класс который слушает координаты
я пытался объяснить что у фрагмента надо было просто сделать
LocationListener locListaner = new LocationListener() {bla-bla}

не в активити, а во фрагменте

но это просто другая реализация, кому как удобно

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2016, 14:55     Как передавать динамические данные (координаты GPS) из активити в диалог?
Еще ссылки по теме:

Android GPS координаты
Как вернуть результат в активити включил юзер gps или нет? Android
Android Как передавать данные из сайта на приложение Android?
Android Отправка данных из dialogfragment в активити в котором был создан диалог
Получить координаты GPS Android

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

Или воспользуйтесь поиском по форуму:
disx
03.02.2016, 14:55  [ТС]     Как передавать динамические данные (координаты GPS) из активити в диалог?
  #20

Не по теме:

по нормальному надо было вообще делать как я писал выше - сделать фрагмент слушателем координат, что бы он вообще ничего не спрашивал у активити
в onCreate берется LocationManager и создается аномимный класс который слушает координаты
я пытался объяснить что у фрагмента надо было просто сделать
LocationListener locListaner = new LocationListener() {bla-bla}

не в активити, а во фрагменте
дак я "услышал" вашу мысль, но активити это главный экран приложения там отображаются текущие координаты, местоположение и т.п., а в диалоге будут производится пользовательские манипуляции с привязкой ко времени, т.е. координаты которые были полученые на момент вызова фрагмента не годятся, только текущие/обновляемые ....

Yandex
Объявления
03.02.2016, 14:55     Как передавать динамические данные (координаты GPS) из активити в диалог?
Ответ Создать тему
Опции темы

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