Intereting Posts
Показать и скрыть представление с помощью анимации слайдов вверх / вниз Фрагмент OnClickListener, вызванный после onDestroyView Номер телефона не отображается на CallStateChanged Android Google Кошелек для цифровых товаров API против Google Play In-App Billing Сколько пользователей получили обновленную версию приложения Вложенные Recyclerview прокручиваются сами по себе Перемещать изображение частично из экрана в android Тестирование на Android: «Несколько файлов dex» при использовании «проверки градиента connectedCheck» Может ли startMethodTracing () возвращать ошибку, если буфер заполняется? Всплывающее меню Android со значками (аналогично Google Map app версии 6) Мыльный веб-сервис недоступен из эмулятора Android? Декодирование AAC с использованием MediaCodec API на Android Как реализовать связь Activity-Service Путь каталога DCIM на Android – Возвращаемое значение Как установить максимальную высоту макета в android?

Android: доступ к внутреннему фрагменту Mapview с помощью ViewPager

Я использую View Pager для отображения трех видов.

"Filter","Streets","Around" 

Каждый вид определяется фрагментом.

ЧТО Я ХОЧУ: Я хочу использовать Mapview Inside My FilterFragment.

ЧТО Я НАДЕЛАЛ :

Я хочу использовать MapView Inside Filter Fragment, но не смог успешно выполнить его. И Получение журнала cate Ошибка:

android.view.InflateException: Binary XML file line #33: Error inflating class com.google.android.maps.MapView

Я также искал в Net и Stackoverflow об этой проблеме и нашел LINK и LINK, но не смог найти эту ссылку. Связано с моей проблемой, поскольку я использую фрагмент с ViewPager.

Я поставил свой код ниже.

Вот мой код для MainViewPager.java:

  package com.example.viewpageractivitydemo; import com.example.viewpageractivitydemo.viewpager.TitlePageIndicator; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import android.util.Log; public class MainViewPager extends FragmentActivity { TestFragmentAdapter adapter; ViewPager pager; @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); Log.i("MainViewPager","Inside Oncreate"); setContentView(R.layout.mainviewpager); pager = (ViewPager) findViewById(R.id.pager); adapter = new TestTitleFragmentAdapter(getSupportFragmentManager()); pager.setAdapter(adapter); TitlePageIndicator indicator = (TitlePageIndicator) findViewById(R.id.indicator); indicator.setViewPager(pager); pager.setCurrentItem(1); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); // pager.setCurrentItem(1); } } 

Вот код для TestFragmentAdapter.java

 package com.example.viewpageractivitydemo; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.util.Log; public class TestFragmentAdapter extends FragmentPagerAdapter { protected static final String[] CONTENT = new String[] { "Filter", "Streets", "Around" }; public String TAG = "TestFragmentAdapter"; private int mCount = CONTENT.length; public TestFragmentAdapter(FragmentManager fm) { super(fm); // TODO Auto-generated constructor stub } @Override public Fragment getItem(int position) { // TODO Auto-generated method stub Log.i(TAG, "Inside getItemMethod with position " + position); if (position == 0) { Log.i("TestFragmentAdapter","Inside if Condition"); return FilterFragment.newInstance(position); } else if (position == 1) { return StreetsFragment.newInstance(position); } else if (position == 2) { return AroundFragment.newInstance(position); } else { return null; } // return MainFragment.newInstance(CONTENT[position % CONTENT.length]); } @Override public int getCount() { // TODO Auto-generated method stub return mCount; } public void setCount(int count) { if (count > 0 && count <= 10) { mCount = count; notifyDataSetChanged(); } } } 

Вот мой код для FilterFragment.java:

 package com.example.viewpageractivitydemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FilterFragment extends Fragment { /* * @Override protected Class<? extends Activity> getActivityClass() { // * TODO Auto-generated method stub return MyFilterActivity.class; } */ public static Fragment newInstance(int position) { Log.i("FilterFragment","Inside New Instasnce"); FilterFragment filterFragment = new FilterFragment(); return filterFragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub Log.i("FilterFragment","Inside OcCreateView"); View view = inflater.inflate(R.layout.filter, null); return view; } } 

Вот мой код для filter.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#C6CDD4" android:gravity="center" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#93A4BA" android:gravity="center" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_margin="5dp" android:gravity="center" android:text="Where Am I" android:textColor="#ffffff" android:textSize="18dp" android:textStyle="bold" > </TextView> </LinearLayout> <com.google.android.maps.MapView android:id="@+id/whereami_mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="0-PaH6rk7RKrZSMd_lqdrZi6FazYyIlX5r6YFyA" android:clickable="true" /> <!-- <com.google.android.maps.MapView android:id="@+id/whereami_mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="0-PaH6rk7RKrZSMd_lqdrZi6FazYyIlX5r6YFyA" /> --> </LinearLayout> </LinearLayout> 

Пожалуйста, может ли кто-нибудь предложить мне ответ на решение моей проблемы. Я потратил много часов на это. Все еще не получаю никакой идеи о моем Вопросе. Thnks in Advance.

Вы можете использовать LocalActivityManager для размещения Activity внутри фрагмента. Это устаревший класс, но он предлагает простейшее решение.

Вот код для фрагмента ( MyFilterFragment в вашем коде). YourMapActivity – это основное действие, расширяющее MapActivity .

 public class MapFragment extends Fragment { private static final String KEY_STATE_BUNDLE = "localActivityManagerState"; private LocalActivityManager mLocalActivityManager; protected LocalActivityManager getLocalActivityManager() { return mLocalActivityManager; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle state = null; if (savedInstanceState != null) { state = savedInstanceState.getBundle(KEY_STATE_BUNDLE); } mLocalActivityManager = new LocalActivityManager(getActivity(), true); mLocalActivityManager.dispatchCreate(state); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //This is where you specify you activity class Intent i = new Intent(getActivity(), YourMapActivity.class); Window w = mLocalActivityManager.startActivity("tag", i); View currentView=w.getDecorView(); currentView.setVisibility(View.VISIBLE); currentView.setFocusableInTouchMode(true); ((ViewGroup) currentView).setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); return currentView; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBundle(KEY_STATE_BUNDLE, mLocalActivityManager.saveInstanceState()); } @Override public void onResume() { super.onResume(); mLocalActivityManager.dispatchResume(); } @Override public void onPause() { super.onPause(); mLocalActivityManager.dispatchPause(getActivity().isFinishing()); } @Override public void onStop() { super.onStop(); mLocalActivityManager.dispatchStop(); } @Override public void onDestroy() { super.onDestroy(); mLocalActivityManager.dispatchDestroy(getActivity().isFinishing()); } } 

Изменить. Поскольку этот ответ был опубликован, Google выпустил API Google Maps Android с поддержкой фрагментов с официальным классом MapFragment .

Чтобы использовать Карты Google, вам необходимо расширить MapActivity , чего вы не сделали. Проверьте этот пример в документах. В духе ремонтопригодности я бы не стал прибегать к решениям, использующим устаревшие функции.

Более твердым решением является расширение MapActivity и копирование недостающей реализации из FragmentActivity . Если вы не хотите или нуждаетесь в обратной совместимости со старыми версиями Android, просто используйте MapActivity а не FragmentActivity , которые уже должны включать функции, необходимые для показа Fragment s в Android 3.0 и более поздних версиях.


Изменить: вот проект, который сделал это для вас .