เกิดข้อผิดพลาดในการขยายแฟรกเมนต์ของคลาส


161

ฉันได้รับข้อผิดพลาด

Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment

เมื่อฉันสลับผ่านแนวตั้งและโหมดแนวนอน ฉันกำลังใช้ชิ้นส่วน xml ของฉันคือ:

 <LinearLayout android:id="@+id/mainLayout"
               android:orientation="horizontal"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content" >

    <ListView android:id="@+id/android:list"
              android:layout_height="wrap_content"
              android:layout_width="fill_parent"/> 

    <fragment android:id="@+id/fragmentDetails"
              android:layout_height="fill_parent"
              android:layout_width="fill_parent"
              class="de.androidbuch.activiti.task.TaskDetailsFragment"/> 
</LinearLayout>

ถ้าฉันสลับผ่านโหมดแนวนอนและแนวตั้งทุกอย่างทำงานได้ดี แต่เมื่อฉันคลิกที่แฟรกเมนต์ของฉัน (และฉันสามารถเห็นแฟรกเมนต์ของฉัน) จากนั้นสลับไปที่โหมดอื่นฉันได้รับข้อผิดพลาด ความคิดใดที่ฉันสามารถแก้ไขได้? พบคำตอบที่นี่ แต่ไม่มีคำตอบใด ๆ ที่ช่วยฉัน ...

06-21 14:55:05.600: ERROR/AndroidRuntime(7636): FATAL EXCEPTION: main
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): java.lang.RuntimeException: Unable to start activity         
ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}:   android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3097)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.access$1600(ActivityThread.java:123)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:997)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.os.Looper.loop(Looper.java:126)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.main(ActivityThread.java:3998)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at java.lang.reflect.Method.invokeNative(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at java.lang.reflect.Method.invoke(Method.java:491)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at dalvik.system.NativeStart.main(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.Activity.setContentView(Activity.java:1771)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at de.androidbuch.activiti.task.TaskActivity.onCreate(TaskActivity.java:83)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     ... 12 more

คุณเก็บไฟล์เลย์เอาต์แยกต่างหากในโฟลเดอร์เลย์เอาต์และเลย์เอาต์ของคุณหรือไม่?
นาธานรูปที่

คุณสามารถจัดทำบันทึกข้อผิดพลาดเต็มรูปแบบรวมถึงบรรทัดหลังจาก "ไม่สามารถเริ่มกิจกรรม ... "
เดฟ

@Nathan รูป: ใช่ฉันทำ .. แต่ได้รับข้อผิดพลาด ..
tsync

@ เดฟ: ที่นี่คุณไป .. ความคิดใด ๆ
tsync

ต้องการโค้ดเลย์เอาต์แนวนอนและมีประโยชน์เช่นกันคือการโทรไปที่ setContentView และวิธีการที่คุณจะออกไปทำกิจกรรมในโหมดแนวตั้งตามที่ฉันคิดว่าคุณเป็น ในขณะนี้ดูเหมือนจะไม่มีข้อมูลเพียงพอ การดูตัวอย่าง FragmentLayout ในการสาธิต API อาจช่วยคุณได้เพราะดูเหมือนว่าคุณกำลังทำสิ่งที่คล้ายกัน
PJL

คำตอบ:


131

อย่างที่ hdemirchian พูดให้ใช้:

import android.support.v4.app.Fragment;

และยังให้แน่ใจว่ากิจกรรมที่มีการใช้ชิ้นส่วน (s) ขยายFragmentActivityแทนปกติActivity,

import android.support.v4.app.FragmentActivity;

เพื่อรับFragmentActivityชั้นเรียน


12
สิ่งนี้ได้รับการโหวตขึ้นมากมาย แต่สำหรับฉันแล้วมันล้มเหลวเมื่อกลับมาใช้งานแอปอีกครั้งและฉันใช้ v4 Fragment และ v4 FrsuationActivity แล้วเพื่อให้ AppCompatActivity แม่นยำยิ่งขึ้น
joseph

4
นี่ไม่ใช่วิธีแก้ปัญหา นำเข้า android.support.v4.app.Fragment; ไม่เปลี่ยนแปลงอะไรเลย จริงๆแล้วมันเป็นการนำเข้าที่ไม่ได้ใช้และไม่จำเป็น
f470071

7
ขอขอบคุณข้อสังเกตด้านข้างคือ AppCompatActivity เป็นผู้สืบทอดของ FragmentActivity
abedfar

แต่ฉันใช้ชิ้นส่วน dagger และชิ้นส่วน dagger จะขยายส่วนที่ไม่ใช่กิจกรรมชิ้นส่วนเสมอ
user3475052

96

ข้อยกเว้นandroid.view.InflateException: Binary XML file line: #... Error inflating class fragmentอาจเกิดขึ้นหากคุณจัดการกับgetActivity()ภายในส่วนของคุณก่อนที่จะonActivityCreated()ถูกเรียก ในกรณีเช่นนี้คุณจะได้รับการอ้างอิงกิจกรรมที่ไม่ถูกต้องและไม่สามารถเชื่อถือได้

ตัวอย่างเช่นรูปแบบต่อไปนี้ไม่ถูกต้อง:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
{
    final View view = inflater.inflate(R.layout..., container, false);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...); - another problem: button is null

    return view;
}

รูปแบบที่ถูกต้อง # 1

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
{
    final View view = inflater.inflate(R.layout..., container, false);

    Button button = view.findViewById(R.id...);
    button.setOnClickListener(...);

    return view;
}

รูปแบบที่ถูกต้อง # 2

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...);
}

@MaximKorobov คุณสามารถโทรgetActivity()ภายในonActivityCreated()หรือในวิธีวงจรใด ๆ ตามมา onDestroyView()แต่ก่อน
กริกอรี่ A.

ขอบคุณมากสิ่งนี้ช่วยได้มาก!
Shotgun Ninja

ขอบคุณ :-) สิ่งนี้ช่วยฉันประหยัดเวลาได้มาก :)
user1007522

ฉันชอบที่จะหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ฉันได้รับความผิดพลาดเป็นระยะ ๆ และฉันคิดว่านี่อาจเป็นปัญหา แม้ว่าส่วนใหญ่รหัสทำงานได้ดีดังนั้นจึงยากที่จะรู้
Daniel Wilson

แบบที่ 2 อาจแก้ไขให้ฉันได้ ไขว้นิ้วเอาไว้. ขอบคุณสำหรับสิ่งนั้น
joseph

53

36

ฉันมีข้อผิดพลาดเดียวกัน ฉันขุดตลอดทั้งวันดันโน่ แต่ฉันคิดว่าฉันลอง ~ 25 โซลูชั่นสำหรับปัญหานี้ ไม่มีใครทำงานได้จนกระทั่งเวลาตี 2 ฉันพบว่าฉันพลาดบรรทัดนี้ที่รายการ xml ของแอป:

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

บรรทัดนั้นอยู่ใน<application>แท็ก ฉันหวังว่าสิ่งนี้จะช่วยให้ใครบางคน GL


3
ผู้กล้าของฉัน. คนอย่างคุณทำให้ดีมาก!
capdragon

5
อธิบายสิ่งที่เกิดขึ้นได้โปรด ประโยชน์ของสายนี้คืออะไร?
Mansour Fahad

2
ขอบคุณบันทึกวันของฉัน ตัวอย่างการใช้ Google แผนที่บน Android นั้นแตกต่างกันฉันสงสัยว่ามีมาตรฐาน
2812866

22

ผมมีปัญหาเหมือนกัน. ทางออกสำหรับฉันคือลำดับของ super.onCreate และ setContentView ภายใน FragmentActivity

คำสั่งดังต่อไปนี้ทำงานได้ดี:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.fc_activity_list_profiles);

3
ทำไมถึงแก้ไขได้
Spencer

1
ในวิธีการ JAVA superจะต้องถูกเรียกที่จุดเริ่มต้นของวิธีเสมอ
Stéphane Bruckert

11
@ StéphaneBruckertไม่ใช่กรณีที่super.method()ต้องเรียกก่อนเสมอ มันขึ้นอยู่กับวิธีที่ซูเปอร์คลาสทำ ในกรณีที่FragmentActivityมีการเริ่มต้นบางอย่างที่จำเป็นในการsetContentViewทำงานอย่างถูกต้อง อย่างไรก็ตามในวิธีอื่น (พูดonKeyUp) คุณอาจต้องการทำงานกับการกระทำแบบมีเงื่อนไข แต่ทางเลือกsuper.onKeyUpซึ่งในกรณีนี้คุณน่าจะเรียกใช้super.onKeyUpเมื่อสิ้นสุดฟังก์ชัน
เคลือบผิว

มันอาจจะเป็นที่น่าสังเกตว่าsuper()(ตัวสร้างของ superclass) จะต้องเป็นฟังก์ชันแรกที่เรียกว่าตัวสร้างคลาสลูกใด ๆ อย่างไรก็ตามการเรียกมันไม่จำเป็นต้องบังคับ
เคลือบผิวเรียบ

17

แฟรกเมนต์ไม่สามารถซ้อนใน XML

เรียนรู้วิธีการนี้ยาก - ถ้าคุณซ้อน<fragment>แท็กXML ตามรูปแบบภายใน (อาจ) ส่วนที่โหลดแบบไดนามิกจากFragmentManagerนั้นคุณเริ่มได้รับข้อผิดพลาดแปลกพยายามขยายชิ้นส่วน XML ของคุณ

กลับกลายเป็นว่าสิ่งนี้ไม่ได้รับการสนับสนุน - มันจะทำงานได้ดีถ้าคุณทำสิ่งนี้โดยใช้FragmentManagerวิธี

ฉันได้รับปัญหานี้เพราะฉันกำลังพยายามโหลดชิ้นส่วนภายใน<DrawerLayout>จาก xml และนี่เป็นสาเหตุของความผิดพลาดในonCreateView()วิธีการเมื่อฉันดึงสแต็กกลับมา


ยังไม่รองรับหรือไม่ ตั้งแต่วันที่appcompat-v7:23.3.0
thanassis

ใช่ฉันกำลังซ้อนส่วนภายใน xml ฉันจะดูว่า
KDeogharkar

แต่มีวิธีแก้ไข / แฮ็กสำหรับปัญหา: stackoverflow.com/a/14695397/860488
Morten Holmgaard

2
ดูหมายเหตุในตอนท้ายของส่วนนี้เพื่อยืนยัน: developer.android.com/about/versions/…
Philippe

ไม่แน่ใจว่าทำไมการแก้ปัญหาจึงง่าย สำหรับฉันเพียงแค่เปลี่ยน<fragment>ด้วยการ<frameLayout>ทำงาน ฉันยังคิดออก - stackoverflow.com/a/19167009/5477548
โหลด

16

ฉันมีปัญหาเช่นเดียวกับที่คุณกำลังเผชิญ ไม่มีเคล็ดลับด้านบนช่วยฉัน ต่อมาฉันพบว่าสิ่งที่ฉันต้องทำคือแก้ไขการนำเข้าของฉันจาก:

import android.app.Fragment;

ถึง:

import android.support.v4.app.Fragment;

ขอบคุณวิธีนี้ใช้ได้สำหรับฉันเช่นกัน ฉันดิ้นรนกับปัญหานี้เป็นเวลา 2 วัน ในที่สุดโซลูชันของคุณก็ใช้ได้กับฉันขอบคุณ hdemirchian ..
ลักษมีแมน

คุณยอดเยี่ยมมาก! ปัญหาของฉันตรงกันข้าม - ตัวช่วยสร้างแฟรกเมนต์นำเข้า android.support.v4.app.Fragment ตามค่าเริ่มต้น และกิจกรรมหลักของฉันขยาย android.app.Activity
การควบคุมอุตสาหกรรมประหลาด

12

คุณเคยลองไหม:

 <fragment
            android:name="de.androidbuch.activiti.task.TaskDetailsFragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

1
คุณได้แสดงไฟล์ 1 xml ให้เรา แต่คุณควรมี 2 ไฟล์ต่อหนึ่งใน / เลย์เอาต์ / และหนึ่งไฟล์ใน layout-land /
Blundell

12

ตรวจสอบให้แน่ใจว่าไม่มีข้อยกเว้นในเมธอด onCreateView ของแฟรกเมนต์ หากมีข้อยกเว้นเกิดขึ้นในวิธีนี้ logcat จะไม่แสดงรายละเอียดที่แน่นอนของข้อยกเว้น แต่จะแสดงข้อความเสมอ:

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.fragment" 
on path: DexPathList[[zip file "/data/app/com.package/base.apk"],
nativeLibraryDirectories=[/data/app/com.package/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

เพียงเพิ่มสิ่งที่พูดว่า Lei ให้ลองจับโค้ดข้างใน oncreateview ของคุณและค้นหาสาเหตุที่แท้จริง ขอบคุณ Lei!
Swaroop

6

หากTaskDetailsFragmentการขยายการทำการเปลี่ยนแปลงในandroid.app.Fragment onCreateView()

ส่งคืนมุมมองของคุณที่คุณต้องการแสดงใน Fragment หรือแปลง Layout ให้เป็นมุมมองโดยใช้LayoutInflaterแล้วส่งคืน

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View mainview = inflater.inflate(R.layout.main, null);
    return mainview;
}

หวังว่างานนี้ :)


6

ตรวจสอบคลาสพา ธ ของคุณซึ่งอาจเป็นตัวขยายมุมมองไม่พบคำจำกัดความของคลาสตามที่กำหนดใน xml class = "de.androidbuch.activiti.task.TaskDetailsFragment" ของคุณเส้นทางข้างต้นอาจผิด


6

ฉันได้รับข้อผิดพลาดนี้ด้วยเหตุผลที่แตกต่างกัน

ขั้นตอนในการทำซ้ำ:

~> ปัญหาของฉันคือฉันสร้างแอปพลิเคชั่นเปล่าใหม่เอี่ยม

~> ฉันสร้างส่วนที่กำหนดเองจากไฟล์ ~> เมนูไฟล์ใหม่

~> ดำเนินการต่อเพื่อปรับแต่งส่วนโดยการเพิ่มเลย์เอาต์และปุ่มอื่น ๆ

~> อ้างอิงส่วนที่กำหนดเองใหม่ใน auto_my.xml ที่สร้างขึ้นโดยอัตโนมัติซึ่งสร้างขึ้นสำหรับฉันเมื่อสร้างแอปพลิเคชัน การทำเช่นนี้ทำให้ XML สร้างวัตถุให้ฉันได้

นี่คือสิ่งที่จับได้เมื่อสร้างแฟรกเมนต์ที่กำหนดเองผ่านไฟล์ ~> เมนูไฟล์ใหม่ซึ่งมันจะสร้างฟังก์ชั่นอินเทอร์เฟซและวางไว้ที่ด้านล่างของไฟล์คลาสแฟรกเมนต์

ซึ่งหมายความว่าคลาส MyActivity ของคุณต้องใช้อินเทอร์เฟซนี้ หากไม่เป็นเช่นนั้นข้อผิดพลาดดังกล่าวจะเกิดขึ้นเฉพาะเมื่ออ้างอิงชิ้นส่วนจาก xml โดยการลบการอ้างอิงสำหรับ Fragment ใน XML อย่างสมบูรณ์และการสร้างแฟรกเมนต์ผ่านโค้ดในไฟล์คลาส MyActivity.java Logcat สร้างข้อผิดพลาดที่กระชับมากขึ้นเพื่ออธิบายปัญหาโดยละเอียดและบ่นเกี่ยวกับอินเตอร์เฟส สิ่งนี้แสดงให้เห็นในกิจกรรมเทมเพลตโครงการ + ส่วน แม้ว่า <~ นั้นเทมเพลตโครงการจะไม่สร้างส่วนต่อประสานอินเตอร์เฟส


5

สำหรับฉันมันเป็นหลังจากการเลื่อนในการติดตามสแต็คฉันพบว่าฉันไม่ได้รับอนุญาตสำหรับ android.permission.ACCESS_NETWORK_STATE

หลังจากเพิ่มการอนุญาตนี้จะได้รับการแก้ไข


1
ไม่ใช่ตัวเอง: "เลื่อนดูการติดตามสแต็กทั้งหมดขอบคุณ @Gil
Batandwa

4

หากคุณมีไฟล์เลย์เอาต์แยกต่างหากสำหรับโหมดแนวตั้งและแนวนอนและได้รับข้อผิดพลาดเงินเฟ้อทุกครั้งที่คุณเปลี่ยนการวางแนวหลังจากคลิกที่รายการมีความคลาดเคลื่อนระหว่างไฟล์เลย์เอาต์ของคุณมากที่สุด

เมื่อคุณได้รับข้อผิดพลาดจะเกิดขึ้นเฉพาะเมื่อคุณคลิกรายการในโหมดแนวนอนหรือเฉพาะในโหมดแนวตั้งหรือทั้งสองอย่าง กิจกรรม TaskDetailsFragment ของคุณใช้ไฟล์เลย์เอาต์ที่อาจมีความคลาดเคลื่อนระหว่างโหมดแนวนอนและแนวตั้งหรือไม่?


ขอบคุณสำหรับคำตอบของคุณ .. ดีฉันมีแฟรกเมนต์ในโหมดแนวนอนเท่านั้นและไม่ได้อยู่ในโหมดแนวตั้ง ดังนั้นฉันสามารถคลิกได้เฉพาะในโหมดแนวนอนเพื่อดูชิ้นส่วน และหลังจากที่ฉันเปลี่ยนเป็นโหมดแนวนอนอีกครั้งฉันจะได้รับข้อผิดพลาดนี้ ...
tsync

นั่นเป็นปัญหาอย่างแน่นอน - คุณมีมุมมองในโหมดแนวตั้งที่ไม่สามารถพบได้ในโหมดแนวนอน การเพิ่มส่วนในแนวนอนแก้ไขปัญหาได้หรือไม่
นาธานรูปที่

1
คุณสามารถมีมุมมองที่ไม่มีอยู่ในไฟล์ทั้งสอง - นั่นคือจุดรวมของการมีเลย์เอาต์ - และแยกกัน อย่างไรก็ตามตรวจสอบรหัส - ฉันมีรหัสหายไปในไฟล์แนวตั้งและได้รับข้อผิดพลาดนี้เมื่อเปลี่ยน
maxpolun

4

หากคุณกำลังเพิ่มFragmentสแตติกนั่นคือใน xml คุณอาจพลาดที่จะนำไปใช้OnFragmentInteractionListenerในActivityคลาสของคุณ จากนั้นการใช้อินเตอร์เฟสจะช่วยแก้ปัญหาได้ หากคุณกำลังเพิ่มFragmentแบบไดนามิกนั่นคือในชั้นเรียน java แล้วนี่ไม่ใช่การแก้ปัญหา เพราะ IDE เองจะไม่อนุญาตให้คุณดำเนินการต่อโดยไม่ต้องใช้อินเทอร์เฟซที่จำเป็น


3

ปัญหาของฉันในกรณีนี้เป็นตัวอย่างง่ายๆของการมีข้อยกเว้นตัวชี้โมฆะโง่ในหนึ่งในวิธีการของฉันที่ถูกเรียกในภายหลังในวงจรชีวิต นี่เป็นสาเหตุให้เกิดข้อยกเว้น "ข้อผิดพลาดพองตัวของคลาส" สำหรับฉัน ในระยะสั้นโปรดอย่าลืมตรวจสอบข้อยกเว้นการติดตามสแต็กเพิ่มเติมเพื่อหาสาเหตุที่เป็นไปได้

เมื่อฉันแก้ไขข้อยกเว้นตัวชี้โมฆะชิ้นส่วนของฉันโหลดได้ดี


3

การแก้ปัญหาที่กล่าวมาข้างต้นไม่ได้ช่วยฉัน ในบันทึกฉันสามารถค้นหารายละเอียดของข้อยกเว้นตามที่ระบุไว้ด้านล่าง:

06-19 16:20:37.885: E/AndroidRuntime(23973): Caused by: java.lang.RuntimeException: API key not found.  Check that /meta-data/ android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/ is in the application element of AndroidManifest.xml.

ฉันทำสิ่งนี้และรหัสของฉันก็ใช้งานได้!

<meta-data  android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCl1yGPZ3mpxxxxxxxAz2R-t7zcWVzrHUL9k"/>
</application>

3

หากคุณไม่ต้องการที่จะเปลี่ยนแปลงอะไรและไปกับ " ส่วนแท็ก " "

ทำเช่นนี้,

<fragment
 android:visibility="gone" (Visibility will not work, just helps in removing frag from xml viewer)(If you want the visibility to be gone make it in your fragment root element visibility=gone)
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:name="com.example.YOUR_FRAGMENT" (This is important)
 />

2

มีประเภทข้อผิดพลาดเดียวกันโดยที่ข้อความแสดงข้อผิดพลาดเดียวกันใน logcat แสดงขึ้น ฉันต้องทำการเปลี่ยนแปลงใน Java Build Path ที่อยู่ด้านProject->Propertiesล่าง ฉันได้รวมถึงห้องสมุดที่เกี่ยวข้องเช่น Google Maps android-support-v4.jarและgoogle-play-services.jar; แต่ฉันก็หายไปรวมถึงสิ่งเหล่านี้'Build class path'ใน'Order and Export'เมนูตัวเลือก บางทีข้อผิดพลาดอยู่ที่นี่

ลองรวมไลบรารีกับเส้นทางคลาสบิลด์

ลำดับของการสร้างคลาสอาจก่อให้เกิดข้อผิดพลาดดังนั้นคำแนะนำของฉันคือพยายามจัดลำดับของเส้นทางของสิ่งปลูกสร้างอีกครั้ง ข้อผิดพลาดหายไปเมื่อฉันใช้คำสั่งต่อไปนี้: 'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'. หน่วยสุดท้ายมีไฟล์ jar ที่กล่าวถึงก่อนหน้านี้


1

ในไฟล์ xml ของคุณเพียงใช้แทนแท็ก นักพัฒนาระบบพยายามสร้าง android.app.Fragment ซึ่งจะล้มเหลวใน API <10 ดังนั้นคุณต้องสร้างกลุ่มมุมมองที่แตกต่างกัน



1

ตรวจสอบให้แน่ใจว่าคุณได้ใช้สิ่งนี้

<meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyBEwmfL0GaZmdVqdTxxxxxxxx-rVgvY" />

ไม่ใช่อย่างนี้ ..

<meta-data 
         android:name="com.google.android.gms.version" 
          android:value="AIzaSyBEwmfL0GaZmdVqdTCvxxxxxxx-rVgvY" /> 

1

เพิ่งมีข้อผิดพลาดเดียวกันนี้ เหตุผลของฉันคือการมองเห็นของชั้นส่วนของฉัน มันถูกกำหนดเป็นค่าเริ่มต้นควรเป็นแบบสาธารณะ


1

คุณสามารถโพสต์ชิ้นส่วนonCreateและonCreateViewวิธีการได้หรือไม่ ฉันมีข้อยกเว้นเหมือนกันทุกประการซึ่งเกิดจากข้อยกเว้นในonCreateวิธีการแยกส่วนเมื่อฉันแก้ไขปัญหานั้นได้แก้ไขข้อผิดพลาดการพองตัวของส่วนย่อย


1

ฉันได้รับข้อผิดพลาดนี้ใน android studio ปัญหาคือชิ้นส่วนของฉันมีเลย์เอาต์ที่สัมพันธ์กันในขณะที่โค้ดในฟังก์ชั่น OnCreateView คือ

mDrawerListView = (ListView) inflater.inflate(
                R.layout.fragment_navigation_drawer, container, false);

รหัสของคุณทำสิ่งเดียวกัน


1

ถ้าคุณต้องการสืบทอดAppCompatActivityคุณสามารถทำสิ่งนี้ได้ - ในกิจกรรม xml ใช้FrameLayoutแบบนี้ -

<FrameLayout
    android:id="@+id/result_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/progress_frame"/>

และในกิจกรรมonCreate-

final FragmentManager supportFragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = supportFragmentManager.beginTransaction();
    ft.replace(R.id.result_fragment, fphResultActivityFragment, "result fragment");
    ft.commitAllowingStateLoss();

ขอบคุณสิ่งนี้ช่วย ไม่แน่ใจว่าทำไมฉันถึงสามารถใช้ <fragment> ในเลย์เอาต์ของฉันได้สำเร็จในแอพอื่น ๆ ที่ฉันเคยทำงานมา แต่มันไม่ทำงานที่นี่!
เอกพจน์ใน

เพิ่งทราบว่าสามารถทำงานได้ แต่มักจะเป็นชิ้นส่วนไดนามิกไม่คงที่
แทนเนอร์ซัมเมอร์ส

1

ฉันได้รับข้อผิดพลาดเดียวกัน แต่ปัญหาของฉันคือชิ้นส่วนของฉันไม่มีรหัสในรูปแบบ xml ของกิจกรรมหลัก


1

หลังจากการต่อสู้วันหนึ่งฉันพบว่าการตรวจสอบสถานการณ์บางอย่างอาจเป็นเพราะคุณเผชิญ

หากทุกอย่างเป็น woking เช่นเดียวกับรหัส google แล้วโปรดตรวจสอบไฟล์รายการในกรณีของฉันฉันเพิ่มคีย์ทางภูมิศาสตร์และรหัสแผนที่ที่เป็นสาเหตุที่เกิดข้อยกเว้น

หมายเหตุ - อย่าเพิ่มสองปุ่มในไฟล์ manifest ลบคีย์แผนที่

meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>

รหัสด้านบนและเพิ่มรหัสนี้

 <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/auto_location"/>

 <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>

1

ฉันมีปัญหาที่คล้ายกัน หลังจากใช้งานตัวอย่าง AdMobฉันพยายามแทรกโฆษณาในแอพของฉันทำให้เกิดข้อผิดพลาดนี้:

01-02 16:48:51.269    8199-8199/it.dndc.BreathPlot E/AndroidRuntime FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity
 Caused by: android.view.InflateException: Binary XML file line #57: Error inflating class fragment

ทางออกคือ: คุณไม่สามารถแทรกส่วนสำหรับโฆษณาลงใน ListActivity ฉันสามารถเพิ่มมันเข้าไปใน FragmentActivity และ ActionBarActivity ได้โดยไม่มีปัญหา

คำแนะนำของฉันคือ: เริ่มจากตัวอย่าง AdMob และเพิ่มเข้าไปในแอพที่คุณมีอยู่: ฉันจะประหยัดเวลาได้มาก !!!


1

หากคุณใช้การทำให้งงงวยกับองค์ประกอบการนำทางคุณต้องแยกส่วนของ Android และ args ของคุณ เพิ่มบรรทัดเหล่านี้ในไฟล์ proguard-rules ของคุณ:

# Exclude the fragments and argType for navigation component.
-keep class * extends androidx.fragment.app.Fragment{}
-keep class com.safetonet.presentation.features.parent.adddevice.model.PresentableAddDeviceData
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.