Problem running android HelloTabWidget example - NullPointerException on addTab()

后端 未结 12 1081
陌清茗
陌清茗 2021-01-13 17:17

I\'ve tried the Tab Layout example, and I\'ve also fixed the few typos in the example (and added all the activities to the manifest). However, when I run it on the emulator

相关标签:
12条回答
  • 2021-01-13 17:34

    This is what worked for me:

    I changed this line to use "artists" tabHost.setCurrentTabByTag("artists");

    And then added a "." in front of TabAndroid(the main activity name) and added the three activities that Ngetha suggested.

    </application>
    
    0 讨论(0)
  • 2021-01-13 17:36

    Better, if you get stuck in such errors, try Project > Clean to regenerate automatically generated files.

    0 讨论(0)
  • 2021-01-13 17:37

    I too was having trouble with the tab widget tutorial.

    I was onyl able to solve the proble reading this SO post, thansk for the answers guys.

    Going back to the tutorial.... the android dev team could improve their documentation.

    They do infact tell us to add the XML activities to the manifest, they just dont' specify it very well.. here is the quote:

    Notice that this doesn't use a layout file. Just create a TextView, give it some text and set that as the content. Duplicate this for each of the three activities, and add the corresponding tags to the Android Manifest file.

    0 讨论(0)
  • 2021-01-13 17:40

    I had the same wired error.

    Try This:

    If you are using eclipse delete the error, change some code(so the app will recompile) and then it should work fine.

    0 讨论(0)
  • 2021-01-13 17:41

    Have you put your activity in the AndroidManifest.xml? You have to tell the application about the activity you want to show, otherwise what you'll got is just an error.

    For example, you can put the following xml code inside the <application> element:

        <activity android:name=".ArtistsActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
    

    Hope this will help.

    -Surya Wijaya Madjid

    0 讨论(0)
  • 2021-01-13 17:44

    Hey do the following steps and i am sure that your problem goes out:-

    Create a class HelloTabWidget.java

    package com.pericent;             //this is package name
    import android.app.TabActivity;
    import android.content.Intent;
    import android.content.res.Resources;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TabHost;
    
    public class HelloTabWidget extends TabActivity  {
    
    private String TAG="HelloTabWidget";
    
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
    
      Resources res = getResources(); // Resource object to get Drawables
      TabHost tabHost = getTabHost();  // The activity TabHost
      TabHost.TabSpec spec;  // Resusable TabSpec for each tab
      Intent intent;  // Reusable Intent for each tab
    
      // Create an Intent to launch an Activity for the tab (to be reused)
      intent = new Intent().setClass(this,ArtistsActivity.class);
      Log.v(TAG,"---artist activity is called---");
    
      // Initialize a TabSpec for each tab and add it to the TabHost
      spec = tabHost.newTabSpec("artists").setIndicator("Artists",res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent);
      tabHost.addTab(spec);
    
    
      // Do the same for the other tabs
      intent = new Intent().setClass(this,AlbumsActivity.class);
      Log.v(TAG,"---album activity is called---");
      spec = tabHost.newTabSpec("albums").setIndicator("Albums",res.getDrawable(R.drawable.ic_tab_albums)).setContent(intent);
      tabHost.addTab(spec);
    
      intent = new Intent().setClass(this, SongsActivity.class);
      Log.v(TAG,"---song activity is called---");
      spec = tabHost.newTabSpec("songs").setIndicator("Songs",res.getDrawable(R.drawable.ic_tab_songs)).setContent(intent);
      tabHost.addTab(spec);
    
      }
    
    }
    

    Create your second activity: ArtistActivity.java

    package com.pericent;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    
    public class ArtistsActivity extends Activity {
     private String TAG="ArtistsActivity";
        /** Called when the activity is first created. */
        @Override
          public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            TextView textview=new TextView(this);
            textview.setText("This is Artist Activity");
            setContentView(textview);
            Log.v(TAG,"---in artist activity---");
        }
    }
    

    Create your third activity: AlbumsActivity.java

    package com.pericent;
    
    import android.R;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    
    public class AlbumsActivity extends Activity{
        private String TAG="AlbumsActivity";
        @Override
        public void onCreate(Bundle savedInstance)
        {
            super.onCreate(savedInstance);
            TextView textview_album=new TextView(this);
            textview_album.setText("This is album activity");
            setContentView(textview_album);
            Log.v(TAG,"---in album activity---");
        }
    
    }
    

    Create your fourth activity: SongsActivity.java

    package com.pericent;
    
    import android.R;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    
    public class SongsActivity extends Activity{
        private String TAG="SongsActivity";
        @Override
        public void onCreate(Bundle savedInstance)
        {
            super.onCreate(savedInstance);
            TextView textview_song=new TextView(this);
            textview_song.setText("This is song activity");
            setContentView(textview_song);
            Log.v(TAG,"---in songs activity---");
        }
    
    }
    

    Make a folder in res/drawable In this folder make 3 XML files: the code of these files like this:-

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- When selected, use grey -->
        <item android:drawable="@drawable/ic_tab_artists_grey"
              android:state_selected="true" />
        <!-- When not selected, use white-->
        <item android:drawable="@drawable/ic_tab_artists_white" />
    </selector>
    

    In the above XML code we use two images, the following are images which must be save in the same folder (res/drawable).

    enter image description here enter image description here

    This is the main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/upper">
    <TabHost 
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp">
        <HorizontalScrollView android:id="@+id/ScrollView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:fillViewport="true" android:scrollbars="none">
               <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
         </HorizontalScrollView>
            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:padding="5dp" />
        </LinearLayout>
    </TabHost>
    </LinearLayout>
    

    This is AdroidManifest:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.pericent"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
           <activity android:name=".HelloTabWidget" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar" >
              <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                     <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
           </activity>
           <activity android:name=".AlbumsActivity" android:label="@string/app_name"></activity>
           <activity android:name=".ArtistsActivity" android:label="@string/app_name"></activity>   
           <activity android:name=".SongsActivity" android:label="@string/app_name" ></activity>
        </application>
    </manifest> 
    

    I think this all information will help, if you have any problem then free to ask me anything. I am always feel happy to help anyone.

    0 讨论(0)
提交回复
热议问题