gpt4 book ai didi

安卓 : Access Mapview Inside Fragment With ViewPager

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:15 25 4
gpt4 key购买 nike

我正在使用 View Pager 显示三个 View 。

"Filter","Streets","Around"

每个 View 都由 fragment 定义。

我想要什么:我想在我的 FilterFragment 中使用 Mapview。

我做了什么:

我想在过滤器 fragment 中使用 MapView 但无法成功运行。并获取日志类别错误:

android.view.InflateException:二进制 XML 文件第 33 行:错误膨胀类 com.google.android.maps.MapView

我还在 Net 和 Stackoverflow 上搜索了这个问题并找到了 LINKLINK但无法找到与我的问题相关的链接,因为我正在使用带有 ViewPager 的 fragment 。

我已将我的代码放在下面。

这是我的 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>

任何人都可以建议我解决我的问题的答案。我在这上面花了很多时间。仍然对我的问题一无所知。提前致谢。

最佳答案

您可以使用 LocalActivityManager 在 fragment 中托管 Activity。这是一个已弃用的类,但它提供了最简单的解决方案。

这是 fragment 的代码(代码中的 MyFilterFragment)。 YourMapActivity 是扩展 MapActivity 的基本 Activity 。

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 发布了带有官方 MapFragment 类 fragment 支持的 Google Maps Android API。

关于安卓 : Access Mapview Inside Fragment With ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com