0

私はアンドロイドの自己学習者です。
現在、Androidアプリケーションに5つのページがあります。最初のページには2つのボタン(button1、button2)が含まれています。button1をトリガーすると、1つのボタンを含む2番目のページに移動する必要があります。 3 番目のページにあるタブ ホストを表示するだけです。同様に、ページ 1 から button2 をトリガーすると、button1 が行ったようにページ 4 とページ 5 に移動する必要があります。

4ページ目からボタンをクリックしている実行中に、
Sorry!というエラーメッセージが表示されました。アプリケーション Tabhost_demo が予期せず停止しました。もう一度お試しください!
(注: 他の Pages アクティビティは、4 つと 5 つではなく、うまく機能しています)。

Java クラスのソースを参照

public class First_index extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    Button btn1 = (Button) findViewById(R.id.button_parent);
    btn1.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
           Intent myIntent = new Intent(view.getContext(), Index_parent.class);
           startActivityForResult(myIntent, 0);
          }
});

これはページ切り替え用ですよね?


そして、このソースはタブホスティング用です

    public class Parent_concpt extends TabActivity {  
        /** Called when the activity is first created. */  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main3);  

            TabHost tabHost = getTabHost();

            // Tab for Attendance
            TabSpec pho = tabHost.newTabSpec("Attendance");
            // setting Title and Icon for the Tab
            pho.setIndicator("Attendance",getResources().getDrawable(R.drawable.icon_att_parent));
        Intent phoIntent = new Intent(this, Att_parents.class);
        pho.setContent(phoIntent);

        // Tab for Marks
        TabSpec mrk = tabHost.newTabSpec("Achievement");
        mrk.setIndicator("Achievement",     getResources().getDrawable(R.drawable.icon_achieve_parents));
        Intent mrkIntent = new Intent(this, Achieve_parents.class);
        mrk.setContent(mrkIntent);

        // Tab for Fee
        TabSpec fees = tabHost.newTabSpec("Fee details");
            fees.setIndicator("Fee details",getResources().getDrawable(R.drawable.icon_fee_details));
        Intent feesIntent = new Intent(this, Feedet_parents.class);
        fees.setContent(feesIntent);

        // Adding all TabSpec to TabHost
        tabHost.addTab(pho);
        tabHost.addTab(mrk);
        tabHost.addTab(fees);}}

私のあいまいさは、問題はManifest.xmlファイルにあるだけだと思います。すべてのアクティビティについて言及できる権限はありますか?


Manifest.xml ソースを参照

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.demo.student"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

        <activity android:name=".First_index"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Index_parent"></activity>


        <activity android:name=".Index_parent"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN1" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Parent_concpt"></activity>

        <activity android:name=".Parent_concept"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN3" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

         <!--  Att_parents -->
         <activity android:name=".Att_parents" />

         <!--  Achieve_parents -->
         <activity android:name=".Achieve_parents" />

         <!--  Feedet_parents -->
         <activity android:name=".Feedet_parents" />


        <activity android:name=".Index_principal"
                  android:label="@string/app_name">
             <intent-filter>
                <action android:name="android.intent.action.MAIN2" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
         </activity><activity android:name=".Princy_concept"></activity>

          <activity android:name=".Princy_concept"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN7" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
         </activity>

         <!--  Att_principal Activity -->
         <activity android:name=".Att_principal" />

         <!--  Perform_principal Activity -->
         <activity android:name=".Perform_principal" />

         <!--  Coll_principal Activity -->
         <activity android:name=".Coll_principal" />

         <!--  Xpense_principal Activity -->
         <activity android:name=".Xpense_principal" />

         </application>
    </manifest>

注:すべてのクラスとレイアウトのファイル名を完全に言及しました。

ここでログキャットを参照してください

05-21 12:13:16.013: W/KeyCharacterMap(274): No keyboard for id 0
05-21 12:13:16.013: W/KeyCharacterMap(274): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-21 12:13:19.843: D/AndroidRuntime(274): Shutting down VM
05-21 12:13:19.843: W/dalvikvm(274): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-21 12:13:19.853: E/AndroidRuntime(274): FATAL EXCEPTION: main
05-21 12:13:19.853: E/AndroidRuntime(274): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.demo.student/com.android.demo.student.Princy_concept}: java.lang.RuntimeException: Your content must have a TabHost whose id attribute is 'android.R.id.tabhost'
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.os.Looper.loop(Looper.java:123)
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-21 12:13:19.853: E/AndroidRuntime(274):  at java.lang.reflect.Method.invokeNative(Native Method)
05-21 12:13:19.853: E/AndroidRuntime(274):  at java.lang.reflect.Method.invoke(Method.java:521)
05-21 12:13:19.853: E/AndroidRuntime(274):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-21 12:13:19.853: E/AndroidRuntime(274):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-21 12:13:19.853: E/AndroidRuntime(274):  at dalvik.system.NativeStart.main(Native Method)
05-21 12:13:19.853: E/AndroidRuntime(274): Caused by: java.lang.RuntimeException: Your content must have a TabHost whose id attribute is 'android.R.id.tabhost'
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.app.TabActivity.onContentChanged(TabActivity.java:105)
05-21 12:13:19.853: E/AndroidRuntime(274):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:201)
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.app.Activity.setContentView(Activity.java:1647)
05-21 12:13:19.853: E/AndroidRuntime(274):  at com.android.demo.student.Princy_concept.onCreate(Princy_concept.java:16)
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-21 12:13:19.853: E/AndroidRuntime(274):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-21 12:13:19.853: E/AndroidRuntime(274):  ... 11 more

ご協力いただきありがとうございます!

4

2 に答える 2

0

これに答えるには遅すぎますが、他の人の助けになると思います。

manifest.xml ファイルでは、アプリの起動時にポップアップするランチャー アクティビティとして 1 つのアクティビティのみを指定する必要があります。

複数のアクティビティをランチャーに割り当てると、java.lang.RuntimeException: Unable to start activity例外がトリガーされます。

そのため、ランチャー アクティビティのほかに他のアクティビティを宣言する正しい方法は、そのカテゴリをデフォルトまたは他のカテゴリに変更することです。

Intent-filter カテゴリの詳細については、http: //developer.android.com/guide/topics/manifest/category-element.htmlにアクセスしてください。

manifest.xml ファイルの詳細については、http: //developer.android.com/guide/topics/manifest/manifest-intro.htmlを参照してください。

<intent-filter>
       <action android:name="android.intent.action.YourActivityName" />
       <category android:name="android.intent.category.Default" />
</intent-filter>
于 2015-05-09T21:07:44.780 に答える
0

あなたの layoutmain3には、TabHost名前付きのandroid.R.id.tabhost

あなたはonCreate()main3を膨らませています:

setContentView(R.layout.main3);

main3.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:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="5dp" >

        <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"
            android:padding="5dp" />
    </LinearLayout>

</TabHost>

TabHostの名前と の名前に注意してくださいTabWidget

完全な例については、こちらを参照してください。

于 2012-06-03T22:01:08.457 に答える