0

Hello I want to create tabLayout with the help of ViewPager class so that I can swipe among the tabs.

I am creating tabs I setup fragments, viewPagerAdapter and viewPager. Here I initialized tabLayout too but I don't understand this error. Please help me to solve.

Here is my main xml which contains tabular layout :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.davda.musicmain.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <include
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            layout="@layout/toolbar_layout"
            >

            <android.support.design.widget.TabLayout
                android:layout_height="wrap_content"
                android:layout_width="match_parent"
                android:id="@+id/tabLayout"
                app:tabMode="scrollable"
                app:tabGravity="center">

            </android.support.design.widget.TabLayout
                >
        </include>
    </android.support.design.widget.AppBarLayout>
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/viewPager"></android.support.v4.view.ViewPager>
    </RelativeLayout>

Here is my code :

    tb = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(tb);


    tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    viewPager = (ViewPager) findViewById(R.id.viewPager);

    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());

    viewPagerAdapter.addFrags(new Albums(), "Albums"); // `new Albums()` should be inside `FragmentPagerAdapter.getItem()`
    viewPagerAdapter.addFrags(new Tracks(), "Tracks"); // `new Tracks()` should be inside `FragmentPagerAdapter.getItem()`
    viewPagerAdapter.addFrags(new Artists(), "Artists"); // `new Artists()` should be inside `FragmentPagerAdapter.getItem()`

    viewPager.setAdapter(viewPagerAdapter);
    tabLayout.setupWithViewPager(viewPager);

Here is stacktrace :

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.davda.musicmain, PID: 32662
              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.davda.musicmain/com.example.davda.musicmain.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.TabLayout.setupWithViewPager(android.support.v4.view.ViewPager)' on a null object reference
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2788)
                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1503)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6209)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.TabLayout.setupWithViewPager(android.support.v4.view.ViewPager)' on a null object reference
                  at com.example.davda.musicmain.MainActivity.onCreate(MainActivity.java:35)
                  at android.app.Activity.performCreate(Activity.java:6745)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2788) 
                  at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1503) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:154) 
                  at android.app.ActivityThread.main(ActivityThread.java:6209) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
D/AppTracker: App Event: crash
Application terminated.
EpicPandaForce
  • 79,669
  • 27
  • 256
  • 428
Pedo
  • 194
  • 1
  • 2
  • 14

2 Answers2

2

Just put the TabLayout outside the <include> tag.

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <include
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        layout="@layout/toolbar_layout"
        />

    <android.support.design.widget.TabLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/tabLayout"
        app:tabMode="scrollable"
        app:tabGravity="center"/>

</android.support.design.widget.AppBarLayout>
Akash Patel
  • 2,757
  • 1
  • 22
  • 30
1

Please refer this code 1. Check the setContentView() your xml layout is correctly in which xml you have the viewpager,tablayout that must be placed. 2. check the id for tab layout,viewpager.

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

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());

    viewPager.setAdapter(viewPagerAdapter);
    tabLayout.setupWithViewPager(viewPager);

}

And

  public class ViewPagerAdapter extends FragmentPagerAdapter {
      public ViewPagerAdapter(FragmentManager fragmentManager) {
          super(fragmentManager);
      }
  
      @Override
      public Fragment getItem(int position) {
          if(position == 0) return new CallLogFragment();
          if(position == 1) return new MissedCallFragment();
          if(position == 2) return new ReceivedCallFragment();
          if(position == 3) return new OutgoingCallFragment();

          throw new IllegalStateException("Unexpected position " + position);
      }
  
      @Override
      public int getCount() {
          return 4;
      }
  
      @Override
      public CharSequence getPageTitle(int position) {
          if(position == 0) return "Call Log";
          if(position == 1) return "Missed Call";
          if(position == 2) return "Received Call";
          if(position == 3) return "Outgoing Call";
        
          throw new IllegalStateException("Unexpected position " + position);
      }
  }
EpicPandaForce
  • 79,669
  • 27
  • 256
  • 428
Prabha Karan
  • 1,309
  • 3
  • 17
  • 35