Проблема с отображением макета TabHost в новом намерении
-
21-09-2019 - |
Вопрос
У меня возникла проблема с использованием 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);
Другие советы
У меня была такая же проблема.К счастью, это было быстро исправлено:
- Удалить
R
файл. - Подождите, пока ваша IDE сгенерирует файл.
- Прибыль!
Я скопировал и вставил код и заметил, что в атрибуте 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, я устранил проблему для меня.