1

3 つの Web ビューを利用して特定のドメインを表示するために使用したい 3 つのタブがあります。すべてのビルドが見つかりますが、アプリを起動しようとすると、実行時に強制的に閉じられ、デバッグすると、レイアウトとビューで開いたままになります (デバッグ時には基本的に何もしません)。

ログキャット 言う

アクティビティ ComponentInfo{com.company.client/com.company.client.MainActivity} を開始できません: java.lang.IllegalStateException: 「public void setup(LocalActivityManager activityGroup)」を呼び出すのを忘れましたか?**

どうやってそれを呼ぶのですか?

私のコードは次のとおりです。

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class MainActivity extends Activity {
TabHost th;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    th = (TabHost) findViewById(R.id.tabhost);
    th.setup();


    TabSpec firstSpec=th.newTabSpec("Classes & Events");
    firstSpec.setIndicator("Classes & Events", null);
    Intent firstIntent= new Intent(this, WebViewActivity.class);
    firstIntent.putExtra("backswipe", false);
    firstSpec.setContent(firstIntent);
    th.addTab(firstSpec);

    TabSpec secondSpec=th.newTabSpec("Twitter");
    secondSpec.setIndicator("Twitter", null);
    Intent secondIntent= new Intent(this, WebViewActivity2.class);
    secondSpec.setContent(secondIntent);
    th.addTab(secondSpec);

    TabSpec thirdSpec=th.newTabSpec("Facebook");
    thirdSpec.setIndicator("Facebook", null);
    Intent thirdIntent= new Intent(this, WebViewActivity3.class);
    thirdSpec.setContent(thirdIntent);
    th.addTab(thirdSpec);
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;

}

}

WebView コード

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebView;

public class WebViewActivity extends Activity {

public WebView webView_A;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);



    webView_A = (WebView) findViewById(R.id.tab1);
    webView_A.getSettings().setJavaScriptEnabled(true);
    webView_A.loadUrl("http://www.eventbrite.com");

}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.web_view, menu);
    return true;
}

}

XML のメイン レイアウト

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFB84D" >

<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"
        android:layout_marginBottom="-3dip"
        android:layout_weight="0" >
    </TabWidget>

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1" >
    </FrameLayout>
</LinearLayout>

</TabHost>

これがログキャットです。

05-23 01:23:06.886: W/dalvikvm(14673): threadid=1: キャッチされない例外で終了するスレッド (group=0x4160e930) 05-23 01:23:06.910: E/AndroidRuntime(14673):致命的な例外: メイン05-23 01:23:06.910: E/AndroidRuntime(14673): java.lang.RuntimeException: アクティビティを開始できません ComponentInfo{com.company.client/com.company.client.MainActivity}: java.lang.IllegalStateException: しました「public void setup(LocalActivityManager activityGroup)」を呼び出すのを忘れましたか? E/AndroidRuntime(14673): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 05-23 01:23:06.910: E/AndroidRuntime(14673): java.lang.reflect.Method.invoke(Method. java:511) 05-23 01:23:06.910: E/AndroidRuntime(14673): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 05-23 01:23:06.910: E/AndroidRuntime(14673): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 05-23 01:23:06.910: E/AndroidRuntime(14673): dalvik.system.NativeStart.main で(Native Method) 05-23 01:23:06.910: E/AndroidRuntime(14673): 原因: java.lang.IllegalStateException: 「public void setup(LocalActivityManager activityGroup)」の呼び出しを忘れましたか? 05-23 01:23:06.910: E/AndroidRuntime(14673): android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:

では、タブで WebViewActivities をアクティブにするにはどうすればよいでしょうか。

4

4 に答える 4

0

LogCat は、タブホストを正しく初期化したことを示しています。「void setup(LocalActivityManager activityGroup)」を使用する必要があります。

于 2013-06-03T13:59:57.007 に答える
0

私はあなたがする必要があると思います

TabSpec firstSpec=th.newTabSpec("Classes & Events");
firstSpec.setIndicator("Classes & Events", null);
Intent firstIntent= new Intent(this, WebViewActivity.class);
firstSpec.setContent(firstIntent);
th.addTab(firstSpec);



TabSpec secondSpec=th.newTabSpec("Twitter");
secondSpec.setIndicator("Twitter", null);
Intent secondIntent= new Intent(this, WebViewActivity2.class);
secondSpec.setContent(secondIntent);
th.addTab(secondSpec);



TabSpec thirdSpec=th.newTabSpec("Facebook");
thirdSpec.setIndicator("Facebook", null);
Intent thirdIntent= new Intent(this, WebViewActivity3.class);
thirdSpec.setContent(thirdIntent);
th.addTab(thirdSpec);

タブバー内にタブを追加する前にコンテンツビューを設定する必要があるためです。

于 2013-05-10T05:30:02.520 に答える
0

Tab-Activity の基本概念は次のとおりです。

TabHostは、タブ付きウィンドウ ビューのコンテナーです。このオブジェクトは、ユーザーが特定のタブを選択するためにクリックする一連のタブ ラベルと、そのページのコンテンツを表示する FrameLayout オブジェクトの 2 つの子を保持します。

個々の要素は通常、子要素自体に値を設定するのではなく、このコンテナー オブジェクトを使用して制御されます。

TabWidgetは、親のタブ コレクション内の各ページを表すタブ ラベルのリストを表示します。このウィジェットのコンテナ オブジェクトは TabHost です。ユーザーがタブを選択すると、このオブジェクトはコンテナ TabHost にメッセージを送信して、表示ページを切り替えるように指示します。コンテナー TabHost は、ラベルの追加、コールバック ハンドラーの追加、およびコールバックの管理に使用されます。

次のようにレイアウトを調整します-

<?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:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1" >
    </FrameLayout>

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="-3dip"
        android:layout_weight="0" >
    </TabWidget>
  </LinearLayout>

  </TabHost>

そして次のようなコードスニペット -

    tabSpec = tabHost.newTabSpec("InstructionId");
                           tabSpec.setIndicator("INSTRUCTIONS",getResources().getDrawable(R.drawable.manual));
    intent = new Intent(this, InstructionsScreen.class);
    intent.putExtra("backswipe", false);

    tabSpec.setContent(intent);   // set content must required the first before adding the tab
    tabHost.addTab(tabSpec);
于 2013-05-10T05:12:51.323 に答える
0

私が気づいた最初の間違いは、タブを追加した後にコンテンツを設定しようとしているということです:

   TabSpec firstSpec=th.newTabSpec("Classes & Events");
   firstSpec.setIndicator("Classes & Events", null);
   Intent firstIntent= new Intent(this, WebViewActivity.class);
   th.addTab(firstSpec);
   firstSpec.setContent(firstIntent);

そのはず:

   TabSpec firstSpec=th.newTabSpec("Classes & Events");
   firstSpec.setIndicator("Classes & Events", null);
   Intent firstIntent= new Intent(this, WebViewActivity.class);
   firstSpec.setContent(firstIntent);
   th.addTab(firstSpec);
于 2013-05-10T05:14:12.167 に答える