問候研究員#1社區,谷歌地圖V2例外:在分段錯誤充氣類片段
我正在開發Android應用程序,在片段和ViewPager顯示谷歌地圖V2。 而我面臨的一個問題是關於擴展包含Google Maps V2的片段佈局。我正在搜索並尋找此鏈接Android, google maps fragment and viewpager - Error inflating class fragment獲取答案,因爲該方法與我一直在尋找的方法相同,在片段中誇大Google Maps V2,但仍然無效。 我也在這個鏈接Android Google Maps in Fragment也在搜索,但結果是一樣的。
這是我fragment_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
>
<LinearLayout
android:id="@+id/layout_detail_fragment_secondlist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#ffffff"
>
<ImageView
android:id="@+id/detail_item_imv_secondlist"
android:layout_width="match_parent"
android:layout_height="150dp"
android:contentDescription="@null"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
/>
<TextView
android:id="@+id/detail_item_tv_title_secondlist"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="#cae0e0e0"
android:gravity="left|center_vertical"
android:textSize="15sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/detail_item_tv_content_secondlist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="fill"
android:padding="10dp"
android:textSize="12sp"
android:lineSpacingMultiplier="1.5"
/>
<fragment
android:id="@+id/detail_item_map_content_secondlist"
android:layout_width="match_parent"
android:layout_height="150dp"
class="com.google.android.gms.maps.SupportMapFragment"
/>
</LinearLayout>
</ScrollView>
這是我fragment_class:
package com.gbu.app.template.fragments;
import java.util.ArrayList;
import com.gbu.app.template.DetailSecondListActivity;
import com.gbu.app.template.R;
import com.gbu.app.template.data.StoreObject;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class DetailSecondListViewPagerFragment extends Fragment {
private ImageView detail_item_imv_secondlist;
private LinearLayout layout_detail_fragment_secondlist;
private TextView detail_item_tv_title_secondlist, detail_item_tv_content_secondlist;
private DisplayMetrics detail_metrics_secondlist;
private ArrayList<StoreObject> detail_store;
@Override
public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflator, container, savedInstanceState);
View view_detail_secondlist = inflator.inflate(R.layout.item_viewpager_detail_secondlist, container, false);
savedInstanceState = getArguments();
detail_metrics_secondlist = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(detail_metrics_secondlist);
layout_detail_fragment_secondlist = (LinearLayout) view_detail_secondlist.findViewById(R.id.layout_detail_fragment_secondlist);
detail_item_imv_secondlist = (ImageView) layout_detail_fragment_secondlist.findViewById(R.id.detail_item_imv_secondlist);
detail_item_tv_title_secondlist = (TextView) layout_detail_fragment_secondlist.findViewById(R.id.detail_item_tv_title_secondlist);
detail_item_tv_content_secondlist = (TextView) layout_detail_fragment_secondlist.findViewById(R.id.detail_item_tv_content_secondlist);
detail_store = new ArrayList<StoreObject>();
detail_store = DetailSecondListActivity.detail_store;
startApp(savedInstanceState);
return view_detail_secondlist;
}
private void startApp(Bundle savedInstanceState) {
// TODO Auto-generated method stub
detail_item_imv_secondlist.getLayoutParams().height = (int) (detail_metrics_secondlist.heightPixels * 0.38);
detail_item_imv_secondlist.setImageResource(R.drawable.default_images);
detail_item_tv_title_secondlist.setText(detail_store.get(savedInstanceState.getInt("current_item")).getTitle());
detail_item_tv_content_secondlist.setText(detail_store.get(savedInstanceState.getInt("current_item")).getAddress());
}
public void onDestroyView() {
super.onDestroyView();
Log.d("message", "onDestroyView");
}
}
這是pager_adapter:
package com.gbu.app.template.adapters;
import com.gbu.app.template.DetailSecondListActivity;
import com.gbu.app.template.fragments.DetailSecondListViewPagerFragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class DetailSecondListPagerAdapter extends FragmentPagerAdapter {
DetailSecondListViewPagerFragment dslvpf;
Bundle args;
public DetailSecondListPagerAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
dslvpf = new DetailSecondListViewPagerFragment();
args = new Bundle();
args.putInt("current_item", arg0);
dslvpf.setArguments(args);
return dslvpf;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return DetailSecondListActivity.detail_store.size();
}
}
這是佈局Main_Activity。 xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.v4.view.ViewPager
android:id="@+id/detail_view_pager_second_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
/>
</RelativeLayout>
這是我Main_Activity的代碼:
package com.gbu.app.template;
import java.util.ArrayList;
import com.gbu.app.template.adapters.DetailSecondListPagerAdapter;
import com.gbu.app.template.data.StoreObject;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
public class DetailSecondListActivity extends FragmentActivity {
private Intent i;
public static ArrayList<StoreObject> detail_store;
private ViewPager detail_viewpager_secondlist;
private DetailSecondListPagerAdapter detail_secondlist_pager_adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail_secondlist);
detail_viewpager_secondlist = (ViewPager) findViewById(R.id.detail_view_pager_second_list);
detail_store = new ArrayList<StoreObject>();
detail_store = SecondListActivity.item_store;
}
@Override
protected void onStart() {
super.onStart();
detail_secondlist_pager_adapter = new DetailSecondListPagerAdapter(getSupportFragmentManager());
detail_viewpager_secondlist.setAdapter(detail_secondlist_pager_adapter);
}
@Override
protected void onStop() {
super.onStop();
TabGroupActivity parentActivity = (TabGroupActivity) getParent();
parentActivity.onActivityResult(3, RESULT_OK, i);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 4 && resultCode == RESULT_OK) {
i = data;
startApp(data);
}
}
private void startApp(Intent data) {
// TODO Auto-generated method stub
detail_viewpager_secondlist.setCurrentItem(data.getIntExtra("position", 0));
}
}
這是AndroidManifest.xml中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gbu.app.template"
android:versionCode="1"
android:versionName="1.0" xmlns:tools="http://schemas.android.com/tools">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18"/>
<permission
android:name="com.gbu.app.template.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-permission android:name="com.gbu.app.template.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.gbu.app.template.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.gbu.app.template.TemplateTabActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.gbu.app.template.FirstListActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.gbu.app.template.DetailFirstListActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.gbu.app.template.SecondTabActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.gbu.app.template.SecondListActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.gbu.app.template.DetailSecondListActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.gbu.app.template.MapviewActivity"
android:label="@string/app_name" >
</activity>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyCYbyZhouA71LgSsWbZxnFEyQrt_Q_xdHQ"/>
</application>
</manifest>
我的問題是,如果我將谷歌地圖V2在Main_Activity,地圖工作得很好,顯示正常。但是,如果我放置片段,結果將觸發異常:錯誤膨脹類片段。這是一個顯示異常的logcat的,我不知道是什麼原因引起的,因爲它沒有顯示類似的ClassNotFoundException或NullException或某事的原因是導致它:
01-11 12:05:44.879: E/AndroidRuntime(7711): android.view.InflateException: Binary XML file line #40: Error inflating class fragment
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
01-11 12:05:44.879: E/AndroidRuntime(7711): at com.gbu.app.template.fragments.DetailSecondListViewPagerFragment.onCreateView(DetailSecondListViewPagerFragment.java:32)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2549)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2549)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.View.measure(View.java:16420)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
01-11 12:05:44.879: E/AndroidRuntime(7711): at android.widget.FrameLayout.onM
它只是從我的代碼說我fragment_class中,錯誤指向只在充氣佈局在:
View view_detail_secondlist = inflator.inflate(R.layout.item_viewpager_detail_secondlist, container, false);
所以,我在這裏失蹤了什麼?這是我沒有添加的一些代碼?或者,我可能沒有真正理解開發片段的概念,Google Maps V2? 任何幫助將會是重要的,謝謝。
您還沒有顯示地圖初始化這個它MapFragment。請給我看。 – Kishan
謝謝你的回覆..即使我沒有初始化它,通常它會顯示地圖..我以前在我的Main_Activity嘗試過,並正常工作,即使我沒有初始化它.. –