Вопрос

У меня возникла проблема с использованием 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):

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.виджет.TabHost.dispatchWindowFocusChanged(TabHost.java 285) на Android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java 640) на Android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java 640) в android.view.ViewGroup.dispatchwindowfocus изменен(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) на java.lang.reflect.Метод.invokeNative (собственный Метод)
в java.lang.reflect.Метод.invoke(метод.java 521) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java 782) на com.android.internal.os.ZygoteInit.main(ZygoteInit.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. Прибыль!

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

android:id="@+id/tabs" 

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

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

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

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

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

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

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

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

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

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

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

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

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

У меня была эта проблема вместе с 'ERROR:Неизвестная опция '-no-crunch".Если вы обновили ADT plug-in в Eclipse, но одновременно не обновили SDK.Обновив SDK Manager в Eclipse, я устранил проблему для меня.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top