LinearLayout в отдельном файле не работает - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть следующий код:

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>

Ответы [ 2 ]

0 голосов
/ 12 февраля 2012

Ну, я исправил это.Я просто должен был использовать «включить»:

<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>
0 голосов
/ 11 февраля 2012

На основании журнала

Could not create tab content because could not find view with id 2131034112

Выполните следующие действия:

1 - Сохраните все ваши файлы. 2- Выберите Проект> Очистить

Попробуйте перезапустить программу и дайте мне знать, если она все еще не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...