Использование ActionBarSherlock с новой поддержкой SupportMapFragment

Я смотрю на использование ActionbarSherlock, но у меня есть один запрос, который удерживает меня.

Поэтому мое приложение должно быть полностью обратно совместимо с уровнем API 7.

Мне нужно внедрить новые Карты Google в моем приложении и сделать это, я должен использовать class SupportMapFragment.

** Мой вопрос **

Можно ли использовать class SupportMapFragment вместе с ActionBarSherlock ?

заранее спасибо

РЕДАКТИРОВАТЬ

Я скачал и посмотрел на библиотеку. Единственные изменения в расширенных Fragments я вижу, очень просты и одинаковы для всех.

Как вы думаете, я могу добавить поддержку?

вот как они поддерживаются.

 package com.actionbarsherlock.app; import android.app.Activity; import android.support.v4.app.DialogFragment; import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; import com.actionbarsherlock.internal.view.menu.MenuWrapper; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import static com.actionbarsherlock.app.SherlockFragmentActivity.OnCreateOptionsMenuListener; import static com.actionbarsherlock.app.SherlockFragmentActivity.OnOptionsItemSelectedListener; import static com.actionbarsherlock.app.SherlockFragmentActivity.OnPrepareOptionsMenuListener; public class SherlockDialogFragment extends DialogFragment implements OnCreateOptionsMenuListener, OnPrepareOptionsMenuListener, OnOptionsItemSelectedListener { private SherlockFragmentActivity mActivity; public SherlockFragmentActivity getSherlockActivity() { return mActivity; } @Override public void onAttach(Activity activity) { if (!(activity instanceof SherlockFragmentActivity)) { throw new IllegalStateException(getClass().getSimpleName() + " must be attached to a SherlockFragmentActivity."); } mActivity = (SherlockFragmentActivity)activity; super.onAttach(activity); } @Override public void onDetach() { mActivity = null; super.onDetach(); } @Override public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { onCreateOptionsMenu(new MenuWrapper(menu), mActivity.getSupportMenuInflater()); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { //Nothing to see here. } @Override public final void onPrepareOptionsMenu(android.view.Menu menu) { onPrepareOptionsMenu(new MenuWrapper(menu)); } @Override public void onPrepareOptionsMenu(Menu menu) { //Nothing to see here. } @Override public final boolean onOptionsItemSelected(android.view.MenuItem item) { return onOptionsItemSelected(new MenuItemWrapper(item)); } @Override public boolean onOptionsItemSelected(MenuItem item) { //Nothing to see here. return false; } 

}

6 Solutions collect form web for “Использование ActionBarSherlock с новой поддержкой SupportMapFragment”

Все это работает как шарм, в основном благодаря большой работе Джейка по ActionBarSherlock

Вот шаги, которые я выполнил:

  1. Создайте class SherlockMapFragment в вашем проекте библиотеки actiobarsherlock. Я просто сделал копию SherlockFragment, потому что мне также нужна поддержка setHasOptionsMenu(true)
  2. Активность распространяется на SherlockFragmentActivity (как обычно)
  3. Этот fragment расширяет недавно созданный файл SherlockMapFragment
  4. ActionBarSherlock требует новую библиотеку google-play-services_lib
  5. Для вашего проекта требуется библиотека ActionBarSherlock. Не нужно снова включать сервисы google-play или создавать против Google API.
  6. Как упоминалось в Graham, вам нужно отказаться от поддержки устройств API 7:

И вот какой код для более подробного объяснения:

SherlockMapFragment

 package com.actionbarsherlock.app; import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; import com.actionbarsherlock.internal.view.menu.MenuWrapper; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.google.android.gms.maps.SupportMapFragment; import android.app.Activity; import android.support.v4.app.Watson.OnCreateOptionsMenuListener; import android.support.v4.app.Watson.OnOptionsItemSelectedListener; import android.support.v4.app.Watson.OnPrepareOptionsMenuListener; public class SherlockMapFragment extends SupportMapFragment implements OnCreateOptionsMenuListener, OnPrepareOptionsMenuListener, OnOptionsItemSelectedListener { private SherlockFragmentActivity mActivity; public SherlockFragmentActivity getSherlockActivity() { return mActivity; } @Override public void onAttach(Activity activity) { if (!(activity instanceof SherlockFragmentActivity)) { throw new IllegalStateException(getClass().getSimpleName() + " must be attached to a SherlockFragmentActivity."); } mActivity = (SherlockFragmentActivity) activity; super.onAttach(activity); } @Override public void onDetach() { mActivity = null; super.onDetach(); } @Override public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { onCreateOptionsMenu(new MenuWrapper(menu), mActivity.getSupportMenuInflater()); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // Nothing to see here. } @Override public final void onPrepareOptionsMenu(android.view.Menu menu) { onPrepareOptionsMenu(new MenuWrapper(menu)); } @Override public void onPrepareOptionsMenu(Menu menu) { // Nothing to see here. } @Override public final boolean onOptionsItemSelected(android.view.MenuItem item) { return onOptionsItemSelected(new MenuItemWrapper(item)); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Nothing to see here. return false; } } 

Активность:

 public class MainActivity extends SherlockFragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } 

Макет действия:

     

Фрагмент карты:

 public class MapFragment extends SherlockMapFragment { private GoogleMap mMap; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = super.onCreateView(inflater, container, savedInstanceState); mMap = getMap(); return root; } } 

Я слышал, что Джейк не собирается делать слишком много для ABS, поскольку Google может вывести свой собственный обратно совместимый ActionBar. Я думаю, если я правильно помню, это обсуждалось в одной из Android-сообществ Google+.

Для новых карт требуется уровень API 8, поэтому, прежде чем беспокоиться о панели действий, вы столкнетесь с проблемами, если вы должны поддерживать API-уровень 7.

Мой совет будет производить 2 файла макета для уровня 7 и один для 8+. На уровне 7 используйте теперь старый MapView, хотя они обесценивают его, что для меня показывает, как API-уровень 7 не обязательно стоит рассматривать как цель. В макете 8+ используйте новую систему карт.

Что касается панели действий, мы переносим приложение прямо сейчас и легко и успешно добавили карту в ViewPager , создав fragment программно (а не в XML). Мы протестировали его на нескольких устройствах.

У нас также не было проблем с использованием новой системы карт, как описано в демоверсии Google с ABS. Мы объявили fragment в XML-макете и установили это как содержимое активности. ActionBar отображается как обычно. Действие – это функция Шерлок-Фрагмент.

В основном, я уверен, что этот SupportMapFragment полностью свежий, и, возможно, у поддерживающего ActionBarSherlock еще нет времени добавить его в проект ABS.

Также он требует API Lvl 8+, поэтому вы можете просто удалить свою поддержку на устройствах API lvl 7 или вам придется ждать, пока Джейк добавит поддержку для нового SupportMapFragment.

Для других API lvls вы можете найти работу здесь: http://xrigau.wordpress.com/2012/03/22/howto-actionbarsherlock-mapfragment-listfragment/

Я попробовал реализовать SupportMapFragment с помощью ActionBarSherlock.

Он работает очень хорошо.

введите описание изображения здесь

Ниже приведен fragment кода.

 package com.example.newmapview; import android.os.Bundle; import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.SubMenu; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; public class MainActivity extends SherlockFragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment fragment = SupportMapFragment.newInstance(); getSupportFragmentManager().beginTransaction() .add(R.id.mapLayout, fragment).commit(); } @Override public boolean onCreateOptionsMenu(Menu menu) { SubMenu subMenu = menu.addSubMenu("Type"); subMenu.add("Normal"); subMenu.add("SATELLITE"); subMenu.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getTitle().toString().equalsIgnoreCase("Normal")) { Toast.makeText(this, "Clicked Normal", Toast.LENGTH_LONG).show(); GoogleMap googleMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.mapLayout)).getMap(); if (googleMap != null) googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); else Toast.makeText(this, "GoogleMap is null", Toast.LENGTH_LONG) .show(); } else if (item.getTitle().toString().equalsIgnoreCase("SATELLITE")) { Toast.makeText(this, "Clicked SATELLITE", Toast.LENGTH_LONG).show(); GoogleMap googleMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.mapLayout)).getMap(); if (googleMap != null) googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); else Toast.makeText(this, "GoogleMap is null", Toast.LENGTH_LONG) .show(); } return true; } } 

Надеюсь, это поможет.

Я не могу комментировать всюду, поэтому я отвечаю @sureshcheemalamudi. Если вы пытаетесь реализовать его на fragmentе или в файле SherlockFragment, взгляните на это: https://stackoverflow.com/a/17803561/1755300

 @Override public boolean onOptionsItemSelected(MenuItem item) { // toggle mapType if (mapFragment != null) { googleMap = mapFragment.getMap(); } switch (item.getItemId()) { case R.id.action_normal: googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); Toast.makeText(getActivity(), "normal", Toast.LENGTH_LONG).show(); return true; case R.id.action_satellite: googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); Toast.makeText(getActivity(), "satellite", Toast.LENGTH_LONG) .show(); return true; case R.id.action_terrian: googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); Toast.makeText(getActivity(), "terian", Toast.LENGTH_LONG).show(); return true; case R.id.action_hybrid: googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); Toast.makeText(getActivity(), "hybrid", Toast.LENGTH_LONG).show(); return true; default: return super.onOptionsItemSelected(item); } } 
  • Как я могу получить права root через Android SDK?
  • Как читать вывод "dbsys shell adb shell"
  • «Идентификатор ресурса не найден для атрибута« showAsAction »в пакете« андроид »»
  • Как получить более 1000 строк с Parse.com?
  • Как установить язык в распознавании речи на Android?
  • ksoap2 org.xmlpull.v1.xmlpullparserexception Ожидаемая ошибка start_tag
  • Есть ли способ определить высоту экрана в андроиде в сантиметрах или дюймах?
  • Android - эмулятор в ландшафтном режиме, экран не вращается
  • Не удается создать обработчик внутри streamа, который не вызвал Looper.prepare ()
  • Android Как реализовать нижний лист из документации по материальному дизайну
  • чтение определенного файла из sdcard в android
  • Interesting Posts

    JSLint сообщает «Небезопасно» для моего регулярного выражения – что это значит?

    Django: группа по дате (день, месяц, год)

    Как я могу передать Android-аудио в Windows 10 через Bluetooth?

    Перезагрузите explorer.exe в Windows 7, сохраняя все значки в системном трее?

    У меня нет сенсорного экрана. Как я могу сделать жесты на сенсорной панели ноутбука Windows 8?

    Пользовательский RoboCopy Progress Bar в PowerShell

    Библиотека Android Picasso, Как добавить заголовки аутентификации?

    Невозможно выполнить Git-push-master для Github – «origin», похоже, не является репозиторием git / разрешенным разрешением

    Разрешены ли повторяющиеся ключи в определении двоичных деревьев поиска?

    Active admin install с Rails 4

    Разница между `% in%` и `==`

    Как отключить ipv6 в Linux Mint

    Зачем использовать несколько столбцов в качестве первичных ключей (составной первичный ключ)

    как включить библиотеки в Java без использования IDE

    Как я могу получить все classы в пространстве имен?

    Давайте будем гением компьютера.