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

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

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

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

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


Спасибо!
http://www.cyberforum.ru/android-dev/thread707680.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2016, 08:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как передавать динамические данные (координаты GPS) из активити в диалог? (Программирование Android):

Как вернуть результат в активити включил юзер gps или нет?
Как вернуть результат в активити включил юзер gps или нет?

GPS Location (GPS_PROVIDER) как получить координаты
Всем привет. Столкнулся с такой проблемой , может еще кто то сталкивался да...

Отправка данных из dialogfragment в активити в котором был создан диалог
Здравствуйте. Нужна помощь. Как сделать так что при нажатии кнопки btnmodal в...

Как передавать данные через USB
Цель заключается в том, чтобы на компьютере вводилось число, которое потом...

Как записать данные GPS в файл?
Уже более суток сижу катаю дипломную работу. Суть такова, для начала мне нужно...

19
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
02.02.2016, 12:10 #2
disx, добрый день!
Подскажите, а диалог будет постоянно обновлять данные, пока показывается?
Если не забыл, данные можно передавать через setArguments.
0
Pablito
2650 / 2132 / 726
Регистрация: 12.05.2014
Сообщений: 7,444
Завершенные тесты: 1
02.02.2016, 12:12 #3
почему не сделать диалог слушателем для приема координат?
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
02.02.2016, 12:44  [ТС] #4
CoolMind,
Подскажите, а диалог будет постоянно обновлять данные, пока показывается?
именно так, а setArguments это чей метод ?

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

т.е. нужно чтоб после вызова DialogFragment'a в нем отображались все изменения координат из активити в реальном времени?
0
Pablito
2650 / 2132 / 726
Регистрация: 12.05.2014
Сообщений: 7,444
Завершенные тесты: 1
02.02.2016, 12:49 #5
а почему сейчас активити слушает координаты, они ей нужны?
все те имплементации интерфейсов для приема координат можно просто реализовать в этом фрагменте
что тут еще подробно объяснять
0
_Night_Scream_
77 / 75 / 9
Регистрация: 08.08.2013
Сообщений: 622
02.02.2016, 12:53 #6
диалог случайно не AlertDialog?
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
02.02.2016, 13:24  [ТС] #7
Паблито,
они ей нужны?
нужны для отображения местоположения на карте и статусов точности...

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

_Night_Scream_, не ..., DialogFragment.
0
Pablito
2650 / 2132 / 726
Регистрация: 12.05.2014
Сообщений: 7,444
Завершенные тесты: 1
02.02.2016, 13:34 #8
да можно по разному делать
1. когда прилетают новые координаты в активити - она вызывает какой-то метод у фрагмента и передает туда эти координаты, но перед вызовом надо проверять на null на всяки пожарный

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

но я бы делал первый вариант
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
02.02.2016, 13:46  [ТС] #9
Паблито, да первый вариант и нужен,

она вызывает какой-то метод у фрагмента
вот я и не могу этого понять, какой метод (что он должен делать) и как активити его вызовет (если изменятся значения Longtitude и Latitude), или как?
0
Pablito
2650 / 2132 / 726
Регистрация: 12.05.2014
Сообщений: 7,444
Завершенные тесты: 1
02.02.2016, 13:52 #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); // или как там переменные называются
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
02.02.2016, 15:05  [ТС] #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");
    }
}


где туплю как сделать?
0
Pablito
2650 / 2132 / 726
Регистрация: 12.05.2014
Сообщений: 7,444
Завершенные тесты: 1
02.02.2016, 16:01 #12
Лучший ответ Сообщение было отмечено disx как решение

Решение

Java
1
2
3
public void onLocationChanged(Location argLocation) {
            printLocation(argLocation);
        }
этот метод выводит координаты которые изменяются? если он работает то вместо этой строчки или после пишем
Java
1
if (dlg1!= null && dlg1.isShowing()) dlg1.updateCoords(argLocation.getLongtitude(), argLocation.getLatitude());
1
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
02.02.2016, 16:42  [ТС] #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");
        }
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
02.02.2016, 16:51 #14
Цитата Сообщение от disx Посмотреть сообщение
такой способ передачи данных в диалог
не лучший, насколько я правильно помню. Передача данных между Activity и Fragment предпочтительно должна строиться на Listener'ах. Поэтому вы о нём и не знали.
1
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
02.02.2016, 17:02  [ТС] #15
CoolMind,
Передача данных между Activity и Fragment предпочтительно должна строиться на Listener'ах
если есть возможность дополнить эту тему Вашим примером был бы очень рад узнать и о таком способе?
0
Pablito
2650 / 2132 / 726
Регистрация: 12.05.2014
Сообщений: 7,444
Завершенные тесты: 1
02.02.2016, 17:07 #16
Цитата Сообщение от CoolMind Посмотреть сообщение
Activity и Fragment предпочтительно должна строиться на Listener'ах. Поэтому вы о нём и не знали
ниче подобного, активити может вызывать методы фрагмента когда надо и сколько требуется
листенеры нужны если фрагменты получают данные от активити, другими словами - если передачу данных инициирует активити то листенеры не нужны, иначе - нужны

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

но я сомневаюсь что ТС осилил такой подход
придет время - переделает и будет красиво и по феншую
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
02.02.2016, 18:27 #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, остальные ссылки сходу не нашёл.
1
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
03.02.2016, 14:38  [ТС] #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); // и тута красиво бегают мои координаты :)
 
    }
 
 
}
1
Pablito
03.02.2016, 14:46
  #19

Не по теме:

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

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

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

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

Не по теме:

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

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

0
03.02.2016, 14:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2016, 14:55
Привет! Вот еще темы с ответами:

Как передавать данные из сайта на приложение Android?
Нужно делать приложение для интернет-магазина, но я не знаю как данные сайта...

Как вызвать метод в активити классе из обычного не активити класса?
Есть активити в котором вводятся логин и пароль. При нажатии кнопки "войти" в...

Как сделать, чтобы данные, введенные в EditText, сохранялись и пополнялись в новом активити?
как сделать что бы данные введенные в EditText сохранялись и пополнялись в...

GPS координаты
public void onCreate(Bundle savedInstanceState) { ...


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

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

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