简体   繁体   English

Android上的TabHost addTabs使APK崩溃

[英]TabHost addTabs on Android crashes the apk

I have a problem that I can not solve, the problem TabHost that crashes when apk run,I've been trying hard for this but still can not, please help. 我有一个我无法解决的问题,apk运行时TabHost崩溃的问题,我一直在为此努力,但仍然无法解决,请帮忙。

activity_main.xml activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

        <TabWidget
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@android:id/tabs"
            android:layout_gravity="bottom"></TabWidget>

        <FrameLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="bottom"
            android:id="@android:id/tabcontent"></FrameLayout>

    </LinearLayout>
    </TabHost>
</RelativeLayout>

MainActivity.java MainActivity.java

package com.example.asus.smartcity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Intent;
import android.widget.TabHost;

public class MainActivity extends AppCompatActivity  {

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

        TabHost tabhostku = (TabHost)findViewById(android.R.id.tabhost);
        tabhostku.setup();

        TabHost.TabSpec spec;
        Intent intent;

        intent = new Intent().setClass(this, MapActivity.class);
        spec = tabhostku.newTabSpec("map");
        spec.setIndicator("map",null);
        spec.setContent(intent);
        tabhostku.addTab(spec);

        intent = new Intent().setClass(this, PlaceActivity.class);
        spec = tabhostku.newTabSpec("place");
        spec.setIndicator("place",null);
        spec.setContent(intent);
        tabhostku.addTab(spec);


    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

MapActivity.java MapActivity.java

import android.app.Activity;
import android.os.Bundle;
/**
 * Created by Asus on 11-Nov-15.
 */
public class MapActivity extends Activity{

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);
    }
}

PlaceActivity.java PlaceActivity.java

package com.example.asus.smartcity;


import android.os.Bundle;
import android.app.ListActivity;
import android.widget.ArrayAdapter;
/**
 * Created by Asus on 11-Nov-15.
 */
public class PlaceActivity extends ListActivity {

    String []placeku={"KBS","Surabaya Carnival","Kebun Bibit"};

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.place);

        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,placeku));
    }
}

Logcat Logcat

11-11 12:51:22.153  19591-19591/? I/art﹕ Late-enabling -Xcheck:jni
11-11 12:51:22.223  19591-19591/com.example.asus.smartcity W/ResourceType﹕ For resource 0x01040529, entry index(1321) is beyond type entryCount(1)
11-11 12:51:22.287  19591-19591/com.example.asus.smartcity W/ResourceType﹕ For resource 0x0104007b, entry index(123) is beyond type entryCount(1)
11-11 12:51:22.288  19591-19591/com.example.asus.smartcity W/ResourceType﹕ For resource 0x01040077, entry index(119) is beyond type entryCount(1)
11-11 12:51:22.314  19591-19591/com.example.asus.smartcity W/ResourceType﹕ For resource 0x0104007b, entry index(123) is beyond type entryCount(1)
11-11 12:51:22.318  19591-19591/com.example.asus.smartcity D/AndroidRuntime﹕ Shutting down VM
11-11 12:51:22.320  19591-19591/com.example.asus.smartcity E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.asus.smartcity, PID: 19591
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.asus.smartcity/com.example.asus.smartcity.MainActivity}: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)
            at android.app.ActivityThread.access$800(ActivityThread.java:156)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:211)
            at android.app.ActivityThread.main(ActivityThread.java:5371)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740)
     Caused by: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
            at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:754)
            at android.widget.TabHost.setCurrentTab(TabHost.java:420)
            at android.widget.TabHost.addTab(TabHost.java:247)
            at com.example.asus.smartcity.MainActivity.onCreate(MainActivity.java:29)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)
            at android.app.ActivityThread.access$800(ActivityThread.java:156)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:211)
            at android.app.ActivityThread.main(ActivityThread.java:5371)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740)
11-11 12:51:25.717  19591-19591/com.example.asus.smartcity I/Process﹕ Sending signal. PID: 19591 SIG: 9

You have to change extends AppCompatActivity to ActivityGroup After that change 您必须更改将AppCompatActivity扩展到ActivityGroup之后

tabhostku.setup();

to

tabhostku.setup(this.getLocalActivityManager());

Try this, 尝试这个,

Change, 更改,

tabhostku.setup();

to

mlam = new LocalActivityManager(this, false);
tabhostku.setup(mlam );

And in onPause and onResume add the following code. 然后在onPauseonResume添加以下代码。

@Override
public void onPause() {
    super.onPause();
    try {
        mlam.dispatchPause(isFinishing());
    } catch (Exception e) {}
}

@Override
public void onResume() {
    super.onResume();
    try {
        mlam.dispatchResume();
    } catch (Exception e) {}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM