【问题标题】:App crashes on setContent(new Intent ) in tabhost应用程序在 tabhost 中的 setContent(new Intent) 上崩溃
【发布时间】:2018-12-06 19:38:30
【问题描述】:

我正在使用 Android 的 Tabhost,无法在 Main Activity 中查看我的 A 活动。 它在setIndicatorsetContent(new Intent(this, a.class)) 中引发错误。需要进行哪些更改?我需要更改 A 活动中的某些代码吗?


MainActivity 代码

public class MainActivity extends AppCompatActivity {

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

    TabHost tabHost = (TabHost)findViewById(R.id.tabhost);
    tabHost.setup();

    //tab 1
    TabHost.TabSpec spec  = tabHost.newTabSpec("Tab 1");
    spec.setContent(new Intent(this,a.class));
    spec.setIndicator("Exams");
    tabHost.addTab(spec);

    //tab 2
    spec = tabHost.newTabSpec("Tab 2");
    spec.setContent(new Intent(this,b.class));
    spec.setIndicator("Pratice");
    tabHost.addTab(spec);


    }
}

错误日志

Process: com.example.vivek.helloworld, PID: 17776
  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.vivek.helloworld/com.example.vivek.helloworld.MainActivity}: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
  Caused by: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
    at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:722)
    at android.widget.TabHost.setCurrentTab(TabHost.java:388)
    at android.widget.TabHost.addTab(TabHost.java:222)
    at com.example.vivek.helloworld.MainActivity.onCreate(MainActivity.java:22)
    at android.app.Activity.performCreate(Activity.java:6662)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)

【问题讨论】:

  • 请分享你的错误日志...
  • 它说要添加 LocalActivityManager 但不知道在哪里添加此活动或子“活动”?
  • "Learning Android Tabhost" – 是的,不要那样做。这是一个旧的、过时的组件,自 API 级别 13 以来,您尝试使用它的特定方式已被弃用多年。相反,在单个 ActivityTabLayout 中使用 Fragments,与ViewPager,如果你愿意的话。 Android Studio 提供了一个模板,可以为您设置大部分内容。
  • @VivekGautam 您好 Vivek,我的回答是否有助于您解决此错误?

标签: android android-studio android-intent tabs android-tabhost


【解决方案1】:

正如错误中所述: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
您需要声明 localactivitymanager 才能解决此错误。 (仅供参考 - 当您在非法或不适当的时间调用该方法时会发生 IllegalStateException)

因此,您需要通知活动有关状态的信息,为此,请实现以下代码:

tabHost.setup(this.getLocalActivityManager());

我还想提醒您注意,自 API 级别 13 以来,TabHost 已被弃用。 TabHost 的替代品是 Fragment 和 Fragment Manager。确保您没有实现过时/弃用的类是一种很好的做法。

此类已在 API 级别 13 中弃用。
改用新的 Fragment 和 FragmentManager API;这些也是 通过 Android 兼容性可在旧平台上使用 包裹。

LocalActivityManager

【讨论】:

  • 请花一些时间阅读How to Answer 并提供一些关于您的答案以及它如何解决原始问题的额外信息。像这样的简短回答没有帮助,可能会被删除。
  • @SimplyGed +1 同意。我不完全确定答案,并想确定它是否解决了最初的问题。无论如何,我会按照建议添加更多信息。
  • 太棒了。有时最好将建议添加为评论,如果 OP 确认它解决了问题,您可以将其添加为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
相关资源
最近更新 更多