Проблема с отображением макета TabHost в новом намерении - PullRequest
3 голосов
/ 19 февраля 2010

У меня проблема с использованием TabHost в новом Намерении типа TabActivity, которое, я надеюсь, вы можете указать мне в правильном направлении. Как ни странно, он работает нормально, когда я пытаюсь просмотреть его в исходном намерении: setContentView (R.layout.main)

Я получаю «принудительное закрытие» и в logcat я получаю следующую ошибку, хотя мой идентификатор Tabhost = «@android: id / tabhost»:

02-18 22: 23: 11.937: ОШИБКА / AndroidRuntime (5944): причина: java.lang.RuntimeException: ваш содержимое должно иметь TabHost, чей идентификатор атрибут 'android.R.id.tabhost'

Я объявил второе намерение в файле Manifest.xml: XML:

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

В рамках первого действия (MainActivity) я начинаю второе намерение (NextActivity) с дополнительными функциями, как показано ниже:

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

b_next.putString("s_string", myString); 

nextActivity.putExtras(b_next); 

В своем файле NextActivity.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 View):

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.NullPointerException
на android.widget.TabHost.dispatchWindowFocusChanged (TabHost.java 285) на android.view.ViewGroup.dispatchWindowFocusChanged (ViewGroup.java 640) на android.view.ViewGroup.dispatchWindowFocusChanged (ViewGroup.java 640) на android.view.ViewGroup.dispatchWindowFocusChanged (ViewGroup.java 640) на android.view.ViewRoot.handleMessage (ViewRoot.java 1645) на android.os.Handler.dispatchMessage (Handler.java 99) на android.os.Looper.loop (Looper.java 123) на android.app.ActivityThread.main (ActivityThread.java 3948) at java.lang.reflect.Method.invokeNative (Native Метод)
в java.lang.reflect.Method.invoke (Method.java 521) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java 782) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java 540) at dalvik.system.NativeStart.main (Native Метод)

Ответы [ 9 ]

7 голосов
/ 23 июня 2011

У меня была такая же проблема. К счастью, было быстрое решение:

  1. Удалить файл R.
  2. Подождите, пока IDE сгенерирует файл.
  3. Profit!
3 голосов
/ 29 июля 2011

Я скопировал и вставил код и заметил, что в атрибуте id у меня было:

android:id="@+id/tabs" 

когда я действительно хотел:

android:id="@android:id/tabs"
2 голосов
/ 23 сентября 2011

, хотя я изменил свой main.xml для использования android:id="@android:id/tabhost", как указано в сообщении об ошибке, он продолжал пытаться использовать старое имя. наконец, я нашел файл res / layout-port / main.xml, который был идентичен main.xml, за исключением того, что использовал неправильный android: id. Должно быть, я добавил портретное изображение случайно, и оно держалось за старое значение. либо исправление портретного файла, либо удаление его решает мою проблему.

2 голосов
/ 30 сентября 2010

Я также столкнулся с этой проблемой. У меня был файл XML, который не был правильно связан с моим кодом в моем res / layout. Когда я исправил название, проблема исчезла.

2 голосов
/ 19 февраля 2010

Ранее я создавал табос с идентификатором android:id="@+id/tabhost". Это работает для вас?

Вы могли бы также рассмотреть программное построение вашей вкладки:

    TabHost t = getTabHost();
    TabSpec tab = t.newTabSpec(label)
                   .setIndicator(label, icon)
                   .setContent(intent);
    t.addTab(tab);
1 голос
/ 06 августа 2011

"public class NextActivity extends TabActivity" - изменить TabActivity на ActivityGroup.

когда возникает проблема, когда вы хотите запустить tabhost в tabhost.it в порядке.

1 голос
/ 03 февраля 2011

У меня тоже была эта ошибка. Для меня это появилось бы после запутывания (через ProGuard), до запутывания это было хорошо.

В конце концов я переименовал файл макета во что-то более сложное и уникальное, и ProGuard не испортила связь. Немного легче, чем идти по пути конфигурации ProGuard.

Таким образом, моя проблема была похожа на SapphireSun, хотя и выражалась в другом процессе (и после затмения, просто чтобы сделать вещи немного сложнее).

Возможно, это один из самых неясных способов получить эту ошибку, но я подумал, что стоит упомянуть.

0 голосов
/ 16 ноября 2011

У меня была эта проблема вместе с 'ОШИБКА: Неизвестная опция' --no-crunch ''. Если вы обновили плагин ADT в Eclipse, но не обновили SDK одновременно. Обновление SDK Manager в Eclipse устранило проблему для меня.

0 голосов
/ 23 июля 2011

Я испытываю ту же ошибку в командном проекте при использовании SVN. Иногда eclipse загружает classes.dex и resources.ap_ из папки bin проекта, а другие - через обновление SVN.

Поскольку эти двоичные файлы генерируются на отдельных компьютерах с индивидуальным кодом, вероятно, именно в этом и заключается ошибка.

Очистка файлов проекта (Project -> Clean) всегда решала проблему для нас!

...