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

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

Войти
Регистрация
Восстановить пароль
 
Johnny13
1 / 1 / 2
Регистрация: 18.10.2011
Сообщений: 50
#1

Карта в диалоговом окне - Программирование Android

25.10.2016, 13:57. Просмотров 268. Ответов 12
Метки нет (Все метки)

Ребят, подскажите пожалуйста, как запустить googlemap в диалоговом окне.
То что есть - приводит к аварийному закрытию приложения.

Может есть другие хорошие варианты?
Суть задачи - во всплывающем окне сделать поля ввода адреса, если адрес корректен, то сразу же он покажется на карте в этом же всплывающем окне.(скрин того что должно получится приложил)

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
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    Button myButton;
    private GoogleMap mMap;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        myButton = (Button) findViewById(R.id.button);
 
        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Dialog dialog = new Dialog(MainActivity.this);
                dialog.setTitle("Address");
                dialog.setContentView(R.layout.address);
                dialog.show();
            }
        });
 
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
 
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
 
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}

address.xml
XML
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@android:style/Theme.NoTitleBar">
 
    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="154dp"
        android:layout_marginTop="143dp"
        android:id="@+id/textView5" />
 
    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="101dp"
        android:layout_marginTop="69dp"
        android:id="@+id/map" />
</RelativeLayout>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2016, 13:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Карта в диалоговом окне (Программирование Android):

Как поменять цвет Background в диалоговом окне? - Программирование Android
Здравствуйте! Подскажите,пожалуйста, как поменять цвет Background в диалоговом окне?

Программа падает при попытке задать текст TextView в диалоговом окне - Программирование Android
Лог: java.lang.IllegalStateException: Could not execute method of the activity at...

Как отметить две даты на диалоговом Календаре - Программирование Android
И использую библиотеку MaterialDateTimePicker. И мне нужно выделить две даты, точнее у меня две кнопки и по нажатии которых у меня...

карта города - Программирование Android
Только начал создавать приложение и наткнулся на проблему. Подскажите как мне на главный фон приложение поставить карту города, которую...

Карта и маркеры - Программирование Android
Всем привет. Есть у меня конкретная задача, но не знаю, каким путей идти к решению. Есть карта, на ней маркеры (сотни и тысячи...

Карта на Canvas - Программирование Android
Здравствуйте! Решил попробовать написать игру под андроид, до этого писал пару приложений несложных. Суть игры рассказывать не буду,...

12
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
25.10.2016, 16:33 #2
напишите лог аварийного закрытия приложения
0
Johnny13
1 / 1 / 2
Регистрация: 18.10.2011
Сообщений: 50
25.10.2016, 16:47  [ТС] #3
ошибки не было, но краш похоже происходит во в этом месте, я его заключил в try/catch, крах исчез, но как исправить это?

Java
1
2
3
4
5
6
7
try {
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
} catch (Exception e) {
e.printStackTrace();
}
10-25 14:08:15.360 21936-21936/com.ivango.popup W/System.err: java.lang.NullPointerException
10-25 14:08:15.370 21936-21936/com.ivango.popup W/System.err: at com.ivango.popup.MainActivity.onCreate(MainActivity.java:46)
10-25 14:08:15.370 21936-21936/com.ivango.popup W/System.err: at android.app.Activity.performCreate(Activity.java:5286)
10-25 14:08:15.370 21936-21936/com.ivango.popup W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
10-25 14:08:15.370 21936-21936/com.ivango.popup W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2233)
10-25 14:08:15.370 21936-21936/com.ivango.popup W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2319)
10-25 14:08:15.370 21936-21936/com.ivango.popup W/System.err: at android.app.ActivityThread.access$1100(ActivityThread.java:135)
10-25 14:08:15.370 21936-21936/com.ivango.popup W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1232)
10-25 14:08:15.370 21936-21936/com.ivango.popup W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
10-25 14:08:15.370 21936-21936/com.ivango.popup W/System.err: at android.os.Looper.loop(Looper.java:136)
10-25 14:08:15.380 21936-21936/com.ivango.popup W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5253)
10-25 14:08:15.380 21936-21936/com.ivango.popup W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
10-25 14:08:15.380 21936-21936/com.ivango.popup W/System.err: at java.lang.reflect.Method.invoke(Method.java:515)
10-25 14:08:15.380 21936-21936/com.ivango.popup W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:939)
10-25 14:08:15.380 21936-21936/com.ivango.popup W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
10-25 14:08:15.380 21936-21936/com.ivango.popup W/System.err: at dalvik.system.NativeStart.main(Native Method)


ошибка вот в этой строке mapFragment.getMapAsync(this); похоже this = null
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
25.10.2016, 16:51 #4
this вряд ли наль, или мапфрагмент или гетмап асинк. добавте проверку на наль
0
Johnny13
1 / 1 / 2
Регистрация: 18.10.2011
Сообщений: 50
25.10.2016, 17:25  [ТС] #5
Продебажил этот участок кода
0
Миниатюры
Карта в диалоговом окне  
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
25.10.2016, 17:34 #6
а, ну все правельно . где new? вы же не создаете фрагмент

Добавлено через 1 минуту
попробуйте так
Java
1
2
3
 FragmentManager fmanager = getSupportFragmentManager();
        Fragment fragment = fmanager.findFragmentById(R.id.map);
        SupportMapFragment supportmapfragment = (SupportMapFragment)fragment;
Добавлено через 5 минут
еще говорят так работает :
Java
1
2
3
4
SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
 
            map = mapFrag.getMap();
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
25.10.2016, 17:36 #7
Цитата Сообщение от Johnny13 Посмотреть сообщение
но краш похоже происходит во в этом месте, я его заключил в try/catch, крах исчез, но как исправить это?
боже, еще один ловец NPE трайкетчами
0
Johnny13
1 / 1 / 2
Регистрация: 18.10.2011
Сообщений: 50
25.10.2016, 17:38  [ТС] #8
Первый вариант приводит к этому
0
Миниатюры
Карта в диалоговом окне  
Johnny13
1 / 1 / 2
Регистрация: 18.10.2011
Сообщений: 50
25.10.2016, 17:41  [ТС] #9
боже, еще один ловец NPE трайкетчами
Уважаемый, меня лишь недавно пришлось этим заниматься, и вместо того что бы высказывать своё ФЕ, рассказали бы как на Ваш взгляд правильно ловить NPE?
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
25.10.2016, 17:46 #10
понял
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        myButton = (Button) findViewById(R.id.button);
 
        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Dialog dialog = new Dialog(MainActivity.this);
                dialog.setTitle("Address");
                dialog.setContentView(R.layout.address);
                dialog.show();
            }
        });
 
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
посмотрите на этот код. вы где ищите фрагмент? в хмл активити а не в диалоге. там его судя по всему нет. просто для проверки вставьте этот код в хмл активити
XML
1
2
3
4
5
6
7
8
9
<fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="101dp"
        android:layout_marginTop="69dp"
        android:id="@+id/map" />
и посмотрите что будет. если сработает. уберайте диалог, создавайте диалог фрагмент и уже в его онкриейт просите карты

Добавлено через 1 минуту
на счет трай\кеч, в вашем случае вообще не ловят наль. его там просто не должно быть, если же все таки надо поймать наль, делают иф(обьект !=наль)
0
Johnny13
1 / 1 / 2
Регистрация: 18.10.2011
Сообщений: 50
25.10.2016, 17:52  [ТС] #11
((( вставил fragment в xml activity_main, всё по прежнему((

буду смотреть fragmentDialog, надеюсь поможет
0
klim76
20 / 14 / 2
Регистрация: 10.06.2016
Сообщений: 142
26.10.2016, 12:24 #12
Johnny13, почитайте - https://developer.android.com/guide/topics/ui/dialogs.html
и напилите уже class myDialog extends DialogFragment
и в нем уже пытайтесь найти фрагмент карты и получить ее асинхронно. Работа точно такая же как и с обычными фраментами
0
Johnny13
1 / 1 / 2
Регистрация: 18.10.2011
Сообщений: 50
26.10.2016, 20:00  [ТС] #13
Подскажите пожалуйста, как сделать чтобы findFragmentById(R.id.map); брал ресурс из layout подключенный в LayoutInflater
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
myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.address, null);
 
                final Dialog dialog = new Dialog(MainActivity.this);
                dialog.setTitle("Address");
                dialog.setContentView(view);
                dialog.show();
 
                Button close = (Button) dialog.findViewById(R.id.btnClose);
                Button save = (Button) dialog.findViewById(R.id.btnSave);
 
                close.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.cancel();
                    }
                });
 
                save.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.cancel();
                    }
                });
 
 
                    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                            .findFragmentById(R.id.map);
                            mapFragment.getMapAsync(new OnMapReadyCallback() {
                        @Override
                        public void onMapReady(GoogleMap googleMap) {
                            LatLng sydney = new LatLng(-34, 151);
                            googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
                            googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
                        }
                    });
                
            }
 
 
        });
0
26.10.2016, 20:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2016, 20:00
Привет! Вот еще темы с ответами:

Вторая SIM карта - Программирование Android
У меня телефон с двумя симками разных операторов (китайский). Подскажите как сделать вызов номера через ВТОРУЮ карту? Как отправить...

GPS + растровая карта - Программирование Android
Добрый день Как привязать gps координаты к растровой карте? Карту сделал банально скриншотом из карт Гугл. Я так думаю надо сделать...

Собственная карта на Android - Программирование Android
Имею собственную карту куска города. Карту могу перевести в любой векторный формат карты. Хочу сделать чтобы и карта была доступна на...

Интерактивная карта здания - Программирование Android
Подскажите пожалуйста, появилась в необходимости создания интерактивной карты здания( в которой будет навигация от одной точки до другой с...


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

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

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