2013-06-10 4 views
0

Я пишу приложение для Android, которое нацелено на 4.0 и выше, и я использую Google Maps v2. Я хотел бы установить содержимое InfoWindow с помощью Fragment. Кто-нибудь знает, возможно ли это?Добавить Android Fragment в InfoWindow Содержание

Мой класс реализует InfoWindowAdapter и здесь соответствующий код:

// 
// InfoWindowAdapter interface 
// 

@Override 
public View getInfoContents (Marker marker) { 
    LinearLayout layout = new LinearLayout(this.getActivity()); 
    LayoutInflater inflater = (LayoutInflater) this.getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = inflater.inflate(R.layout.map_details, layout); 

    MapDetailsFragment frag = new MapDetailsFragment(); 
    // TODO: How to add this fragment to v??? 

    return v; 
} 

@Override 
public View getInfoWindow (Marker marker) { 
    return null; 
} 

Я попытался следующий код после инстанцировании frag:

this.getFragmentManager().beginTransaction().replace(R.id.fragment_map_details, frag).commit(); 

Но R.id.fragment_map_details происходит от R.layout.map_details и, таким образом FragmentManager Безразлично Я еще ничего об этом не знаю.

Любые указатели были бы очень признательны!

ответ

0

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

+0

Я думаю, что вы правы. У меня это было уже несколько дней без везения. К счастью, я смог сделать большинство методов в этом фрагменте static, поэтому мне удалось раздуть представление и установить все поля, используя статические методы. Не идеальный, но не дублирующий код. – themanatuf

0

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

Тот же случай был бы для фрагментов, поэтому вы можете перестать пытаться это сделать, а вместо этого создать макет, который связывает map_details и макет фрагмента. Использование include в xml, вероятно, будет работать.

0

Три предложения:

  1. Сделка и совершающие является асинхронным. Вы можете попробовать позвонить http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions(). Тем не менее, я получил исключения в какой-то момент, когда пытался это использовать. Но вам может быть повезло больше.

  2. В противном случае вы можете попробовать добавить фрагмент как обычный подъярус в свой контейнер, заменив R.id.fragment_map_details на представление, полученное с frag.getView(). Однако это просто дикая догадка. Возможно, вы не должны использовать это возвращаемое значение таким образом. (Я получил немного осторожным, когда дело доходит до API Android, ...)

  3. От https://developers.google.com/maps/documentation/android/infowindows (под «Пользовательские информационные окна»):

Чтобы обновить информационное окно позже (например, после загрузки изображения), вызовите showInfoWindow().

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