سؤال

أواجه مشكلة في استخدام TabHost في نية جديدة من نوع النوع من الجدولة وآمل أن تتمكن من توجيهني في الاتجاه الصحيح. بشكل ممتع يعمل بشكل جيد عندما أحاول مشاهدته في النية الأصلية: setContentView (R.Layout.main)

أحصل على "إغلاق قسري" وداخل Logcat ، أحصل على الخطأ التالي على الرغم من أن معرف TabHost الخاص بي = "Android: id/tabHost":

02-18 22: 23: 11.937: خطأ/AndroidRuntime (5944): سبب: java.lang.runtimeexception: يجب أن يكون المحتوى الخاص بك يحتوي

لقد أعلنت النية الثانية في ملف manesest.xml: xml:

<activity android:name=".NextActivity" android:label="@string/app_name" > 

ضمن النشاط الأول (النشاط الرئيسي) ، أبدأ النية الثانية (النشاط التالي) ، مع الإضافات ، على النحو التالي:

Intent nextActivity = new Intent(MainActivity.this,NextActivity.class); 
Bundle b_next=new Bundle(); 

b_next.putString("s_string", myString); 

nextActivity.putExtras(b_next); 

في ملف java nextivity.java الخاص بي ، أحصل على الإضافات وأحاول عرض طريقة عرض tabhost:

public class NextActivity extends TabActivity { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 

        String myString; 
        Bundle b_initial; 

        b_initial = getIntent().getExtras(); 

        myString = b_initial.getString("s_string"); 

     setContentView(R.layout.main); 

        } 
}

أحصل على نفس الخطأ في استخدام مثال TabHost على موقع مطور Android (عرض Hellow):

main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <LinearLayout 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"> 
        <TabWidget 
            android:id="@android:id/tabs" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" /> 
        <FrameLayout 
            android:id="@android:id/tabcontent" 
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"> 
            <TextView 
                android:id="@+id/textview1" 
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent" 
                android:text="this is a tab" /> 
            <TextView 
                android:id="@+id/textview2" 
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent" 
                android:text="this is another tab" /> 
            <TextView 
                android:id="@+id/textview3" 
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent" 
                android:text="this is a third tab" /> 
        </FrameLayout> 
    </LinearLayout> 
</TabHost>

شكرا مقدما الناس ...

التوضيح: هذا ما أحصل عليه حقًا من Logcat:

java.lang.nullpointerxception
في Android.widget.tabhost.dispatchwindowfocusChanged (tabhost.java 285) في Android.ViewGroup.DispatchwindowFocusChanganged (viewgroup.java 640) at Android.View.ViewRoot.handleMessage (ViewRoot.java 1645) at Android.Os.Handler.DispatchMessage (Handler.Java 99) at Android.Os.Loop.loop (looper.java 123) at android .app.activitythread.main (Activitythread.java 3948) في java.lang.reflect.method.invokenistial (الطريقة الأصلية)
في java.lang.reflect.method.invoke (method.java 521) at com.android.internal.os.zygoteinit $ methodandargscaller.run (zygoteinit.java 782) at .java 540) في dalvik.system.nativestart.main (الطريقة الأصلية)

هل كانت مفيدة؟

المحلول

سبق أن قمت ببناء tabhosts مع معرف من android:id="@+id/tabhost". هل هذا العمل بالنسبة لك؟

يمكنك أيضًا التفكير في إنشاء عرض علامة التبويب برمجيًا:

    TabHost t = getTabHost();
    TabSpec tab = t.newTabSpec(label)
                   .setIndicator(label, icon)
                   .setContent(intent);
    t.addTab(tab);

نصائح أخرى

كان لي نفس المشكلة. لحسن الحظ كان هناك حل سريع:

  1. حذف R ملف.
  2. انتظر IDE لإنشاء الملف.
  3. ربح!

كنت قد قمت بنسخ الكود ولصقه ولاحظت أنه في سمة الهوية كان لدي:

android:id="@+id/tabs" 

عندما كان ما أردته حقًا هو:

android:id="@android:id/tabs"

واجهت أيضا هذه المشكلة. كان لدي ملف XML لم يكن مرتبطًا مع الكود الخاص بي بشكل صحيح في الدقة/التخطيط. عندما أصلحت التسمية ، ذهبت المشكلة.

على الرغم من أنني قمت بتغيير main.xml للاستخدام android:id="@android:id/tabhost" مثل الخطأ المذكور ، استمر في محاولة استخدام الاسم القديم. أخيرًا ، وجدت ملف RES/Layout-port/main.xml الذي كان مطابقًا لـ main.xml باستثناء استخدام Android الخاطئ: ID. لا بد لي من إضافة وجهة نظر صورة عن طريق الخطأ وكانت تمسك بالقيمة القديمة. إما إصلاح ملف الصورة أو إزالته يعمل على إصلاح مشكلتي.

كما كان لدي هذا الخطأ. بالنسبة لي ، سيظهر بعد التشويش (عبر البروغ) ، كان الأمر جيدًا.

في النهاية ، قمت بإعادة تسمية ملف التصميم الخاص بي إلى شيء أكثر تعقيدًا وفريدة من نوعه ، ولم يفسد Proguard الربط. قليلا أصابع من النزول في مسار التكوين البروغ.

لذلك كانت مشكلتي مشابهة لـ Sapphiresun ، على الرغم من التعبير عنها من خلال عملية مختلفة (ونشر Eclipse ، فقط لجعل الأمور أكثر صعوبة).

ربما تكون هذه واحدة من أكثر الطرق غموضًا للحصول على هذا الخطأ ، لكنني اعتقدت أن الأمر يستحق الذكر.

"public class NextActivity extends TabActivity" -تغيير الجدولة إلى ActivityGroup.

عندما تحدث المشكلة عندما تريد تشغيل tabhost في tabhost.it على ما يرام.

أواجه نفس الخطأ في مشروع الفريق ، عند استخدام SVN. في بعض الأحيان ، يقوم Eclipse بتحميل الفئات. dex والموارد.

نظرًا لأن هذه الملفات الثنائية يتم إنشاؤها على الآلات الفردية باستخدام التعليمات البرمجية الفردية ، فمن المحتمل أن يأتي الخطأ.

تنظيف ملفات المشروع (Project -> Clean) حل دائمًا المشكلة بالنسبة لنا!

واجهت هذه المشكلة جنبا إلى جنب مع "خطأ: خيار غير معروف"-لا كراش ". إذا قمت بتحديث المكون الإضافي ADT في Eclipse ولكن لم تقم بتحديث SDK في نفس الوقت. تحديث مدير SDK في Eclipse ، إصلاح المشكلة بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top