2016-08-20 2 views
1

je l'activité suivanteImpossible de démarrer l'activité ComposantInfo - java.lang.IllegalStateException

public class MainActivity extends AppCompatActivity { 

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

     TabHost mainTabHost = (TabHost) findViewById(R.id.mainTabHost); 
     mainTabHost.setup(); 

     mainTabHost.addTab(mainTabHost.newTabSpec("Tab 1").setIndicator("", ContextCompat.getDrawable(this, R.drawable.d1)).setContent(new Intent(this, Activity1.class))); 

     mainTabHost.addTab(mainTabHost.newTabSpec("Tab 2").setIndicator("", ContextCompat.getDrawable(this, R.drawable.d2)).setContent(new Intent(this, Activity2.class))); 

     mainTabHost.addTab(mainTabHost.newTabSpec("Tab 3").setIndicator("", ContextCompat.getDrawable(this, R.drawable.d3)).setContent(new Intent(this, Activity3.class))); 
    } 
} 

Et c'est le XML

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@id/mainTabHost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activityHorizontalMargin" 
    android:paddingRight="@dimen/activityHorizontalMargin" 
    android:paddingTop="@dimen/activityVerticalMargin" 
    tools:context=".MainActivity"> 

    <RelativeLayout 
     android:id="@id/mainHomeLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentTop="true" /> 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" /> 

    </RelativeLayout> 

</TabHost> 

Il y a une autre activité, dans laquelle appuyer sur un bouton lance cette activité. Cependant, l'activité ne se lance pas et je reçois l'erreur suivante:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nirvanapass/com.nirvanapass.MainActivity}: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'? 

J'ai cherché en ligne - mais peu importe les solutions que je pourrais trouver utiliser ActivityGroup ou TabActivity - tous deux sont déconseillés. Comment faire face à cette erreur et résoudre ce problème?

+0

http://stackoverflow.com/questions/3272500/android-exception- did-you-oublier-d'appel-public-void-setup-localactivitymanag –

+0

Ests 'ActivityGroup' qui est obsolète. Je cherche un meilleur moyen, même si cela signifie que je dois réécrire mon code. – pratnala

+0

Eh bien, je voudrais regarder dans le ViewPager. –

Répondre

1

La meilleure solution consiste à utiliser une solution d'onglet moderne. TabHost est obsolète depuis un certain temps. L'utilisation d'un Intent pour un contenu d'onglet a été abandonnée pour cinq ans, et ce n'était jamais une bonne idée même avant cela.

La plupart des implémentations d'onglets modernes utilisent un ViewPager avec une sorte d'indicateur à onglets. PagerTabStrip et TabLayout sont tous les deux dans le SDK Android, et l'Android Arsenal répertorie de nombreux autres indicateurs de tabulation dans their ViewPager category.

Si vous voulez vraiment le style rétro d'un TabWidget, utilisez soit FragmentTabHost, soit TabHost où les onglets sont des vues.

Voici applications exemples pour:

+0

Fantastique. Je vais essayer et revenir (dans quelques jours). Merci! – pratnala

+0

Marquage accepté pour l'instant car il semble que c'est juste – pratnala