У меня есть следующий код:
public class YazCalcActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = (TabHost)this.findViewById(R.id.tabhost);
tabHost.setup();
TabHost.TabSpec calculateSpec = tabHost.newTabSpec("Calculate");
calculateSpec.setIndicator("Calculate");
calculateSpec.setContent(R.id.calculateLayout);
TabHost.TabSpec solveSpec = tabHost.newTabSpec("Solve");
solveSpec.setIndicator("Solve");
solveSpec.setContent(R.id.solveLayout);
tabHost.addTab(calculateSpec);
tabHost.addTab(solveSpec);
tabHost.setCurrentTab(0);
}
}
И файл main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TabHost
android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/calculateLayout" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/solveLayout" >
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBox" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
Проблема заключается в том, что, если я вставляю код CalculayLayout и solveLayout в отдельный XML-файлы и делать вычисленияSpec.setContent (R.layouts.calculatelayout) вместо вычисленияSpec.setContent (R.id.calculateLayout) - при запуске приложения происходит сбой.
Почему ???
upd Журнал ошибок:
02-10 19: 55: 02.988: W / dalvikvm (31196): threadid = 3: поток выходит с необработанным исключением (группа = 0x4001b168) 02-10 19: 55: 02.988: E / AndroidRuntime (31196): обработчик Uncaught: основной выход потока из-за неисследованного исключения 02-10 19: 55: 03.018:E / AndroidRuntime (31196): java.lang.RuntimeException: Невозможно начать действие ComponentInfo {com.ia01.yazcalc / com.ia01.yazcalc.YazCalcActivity}: java.lang.RuntimeException: Не удалось создать содержимое вкладки, поскольку не удалось найти представлениес идентификатором 2131034112 02-10 19: 55: 03.018: E / AndroidRuntime (31196): на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2496) 02-10 19: 55: 03.018: E / AndroidRuntime (31196):в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2512) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): в android.app.ActivityThread.access $ 2200 (ActivityThread.java:119) 02-1019: 55: 03.018: E / AndroidRuntime (31196): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1863) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): на android.os.Handler.dispatchMessage (Handler.java:99) 02-10 19: 55: 03.018: E /AndroidRuntime (31196): на android.os.Looper.loop (Looper.java:123) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): на android.app.ActivityThread.main (ActivityThread.java:4363) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): в java.lang.reflect.Method.invokeNative (собственный метод) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): в Java.lang.reflect.Method.invoke (Method.java:521) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:860)) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): at dalvik.system.NativeStart.main (собственный метод) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): вызвано: java.lang.RuntimeException: не удалось создать содержимое вкладки, поскольку не удалось найти view с идентификатором 2131034112 02-10 19: 55: 03.018: E / AndroidRuntime (31196): at android.widget.TabHost $ ViewIdContentStrategy. (TabHost.java:587) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): at android.widget.TabHost $ ViewIdContentStrategy. (TabHost.java:578) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): at android.widget.TabHost $ TabSpec.setContent (TabHost.java:435) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): на com.ia01.yazcalc.YazCalcActivity.onCreate (YazCalcActivity.java:18) 02-10 19: 55: 03.018: E / AndroidRuntime (31196):в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2459) 02-10 19: 55: 03.018: E / AndroidRuntime (31196): ... еще 11
upd2
Я очистил проект, но ничего не изменилось,НО.Я нашел информацию об этой проблеме.Я не могу установить «макет» как контент напрямую, потому что мне нужно сначала создать форму просмотра этого макета.Поэтому я изменил код следующим образом:
public class YazCalcActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = (TabHost)this.findViewById(R.id.tabhost);
tabHost.setup();
TabHost.TabSpec calculateSpec = tabHost.newTabSpec("Calculate");
calculateSpec.setIndicator("Calculate");
View calculateView = this.getLayoutInflater().inflate(R.layout.calculatelayout, null);
calculateSpec.setContent(calculateView.getId());
TabHost.TabSpec solveSpec = tabHost.newTabSpec("Solve");
solveSpec.setIndicator("Solve");
View solveView = this.getLayoutInflater().inflate(R.layout.solvelayout, null);
calculateSpec.setContent(solveView.getId());
tabHost.addTab(calculateSpec);
tabHost.addTab(solveSpec);
tabHost.setCurrentTab(0);
}
}
Но я все еще получаю ту же ошибку.Ого ...
upd3 Решено.
Ну, я исправил это дерьмо.Я просто должен был использовать «включить»:
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<include layout="@layout/calculate_layout"
android:id="@+id/calculateTab" />
<include layout="@layout/solve_layout"
android:id="@+id/solveTab" />
</FrameLayout>