1

В настоящее время я работаю над тем, чтобы маркер карты google в окне информации об щелчке подключался к Wi-Fi, поэтому у меня есть настраиваемая активность диалогового окна для входа в систему, мне нужен метод обратного вызова с параметром маркера. Как я могу передать параметр Маркер m новому действию, если я хочу позвонить wificonnector(m) в этот новый класс? кажется putextra не работает здесьAndroid: Как передать объект в новую начальную активность

public void wificonnector(Marker marker) 
     {...} 

@Override 
public void onInfoWindowClick(Marker m) { 

Intent i = new Intent(myMap.this, ConnectDialog.class); 
i.putExtra("marker",m);     
startActivity(i); 
} 

ответ

1

Если вам нужен ssid в ConnectDialog, почему бы не отправить это значение вместо целого Marker?

Intent i = new Intent(myMap.this, ConnectDialog.class); 
String ssid = m.getSnippet(); // or title, depending on where you store ssid 
i.putExtra("ssid",ssid); 
startActivity(i); 

Marker объекты должны рассматриваться как View объектов. Если вы попытаетесь отправить их вне их контекста, они вызывают утечку памяти.

+0

Я меняю способ сделать это, потому что мне нужно ssid, поэтому я создаю локальную переменную string в mark.gettitle() и передаю эту строку в действие диалога, она должна работать, ваша рекомендация подобна что я делаю, спасибо – atom2ueki

1

Поскольку Intents используется Bundle для предоставления данных другой деятельности, вы не можете поместить маркер в Extras. Класс Marker не использует интерфейс Parcelable или Serializable, который необходим для помещения объекта в Bundle.

Но вы можете поместить в него MarkerOptions и создать новый маркер в своем классе ConnectDialog.

+0

создать новый маркер? потому что мой маркер основан на том, на который я нажимаю, из класса ConnectDialog, как я могу узнать, какой маркер я нажимаю. Мне нужно использовать этот конкретный маркер, чтобы получить ssid и подключиться. – atom2ueki

0

Есть много возможностей.

Очень популярным является установить статическую переменную в коде, как:

ConnectDialog.marker = marker;  
Intent i = new Intent(myMap.this, ConnectDialog.class); 
i.putExtra("marker",m);     
startActivity(i); 

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

Другая возможность заключается в том, чтобы получить пользовательский класс, который является «Serializable», и нажать на него по желанию. Такой пример может быть MarkerOptions или любой другой пользовательский класс.

+0

Использование переменной 'static' не так просто, как быстро. Когда процесс приложения находится в фоновом режиме и убит, вы получаете 'NullPointerException' при возврате в 'ConnectDialog'. Я рекомендую использовать 'static'. –

Смежные вопросы