0

I am very new to android. I was making sliding tab layout using Material Design, following a particular tutorial. Now I am getting this error, as stated in my Title. I am calling the activity Main3Activity from the MainActivity .If any one can point out the error, and more importantly help me correct it.

PS. This is my first post here, so apologies in advance.

MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_appbar);
        toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);




        //getSupprtActionBar().setDisplayShowHomeEnabled(true);


        NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);

        drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);


    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.action_search).getActionView();
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));

        return true;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id=item.getItemId();
        switch(id)
        {
            case R.id.menu_all_reminder:
                if(item.isChecked())
                    item.setChecked(false);
                else
                    item.setChecked(true);
                getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#F44336")));
                return true;

            case R.id.menu_ToDo:
                if(item.isChecked())
                    item.setChecked(false);
                else
                    item.setChecked(true);
                getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#03A9F4")));
                return true;

            case R.id.menu_bills:
                if(item.isChecked())
                    item.setChecked(false);
                else
                    item.setChecked(true);
                getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#4CAF50")));
                return true;

            default:
                return super.onOptionsItemSelected(item);

        }
    }


}

This is Main3Activity, which is basically the activity with the sliding layout. And this is a click away from the Recycler View of the Navigation drawer in the Main Activity

Main3Activity.java

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

        Toolbar toolbar= (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);
       getSupportActionBar().setHomeButtonEnabled(true);
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        NavigationDrawerFragment drawerFragment=(NavigationDrawerFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);

        drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);


        mPager = (ViewPager) findViewById(R.id.pager);

        mPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
        mTabs = (SlidingTabLayout) findViewById(R.id.tabs);
    mTabs.setViewPager(mPager);
    }


    class MyPagerAdapter extends FragmentPagerAdapter {
        String[] tabs;
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            MyFragment myFragment=MyFragment.getInstance(position);
            return myFragment;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return tabs[position];
        }

        @Override
        public int getCount() {
            return 6;
        }
    }

    public static class MyFragment extends Fragment {
        private TextView textView;
        public static MyFragment getInstance(int position) {

            MyFragment myFragment = new MyFragment();
            Bundle args=new Bundle();
            args.putInt("position",position);
            myFragment.setArguments(args);
            return myFragment;

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View layout=inflater.inflate(R.layout.fragment_my,container,false);
            textView=(TextView)layout.findViewById(R.id.position);
            Bundle bundle=getArguments();
            if (bundle!=null)
            {
                textView.setText("The Page Selected is"  +bundle.getInt("position"));
            }
            return layout;
        }
    }

}

This is Manifest

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="demo.demo2">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="Remind Me"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>
        <activity android:name=".SearchResultsActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
        </activity>
        <activity android:name=".Main2Activity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="Demo.Demo2.MainActivity" />
        </activity>
        <activity android:name=".Main3Activity">

        </activity>
    </application>

</manifest>

Now, this is activity_main3.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"

    tools:context="demo.demo2.Main3Activity"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical">

      <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout

            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/app_bar"
            android:orientation="vertical"
            tools:context="demo.demo2.Main3Activity">
            <include
                android:id="@+id/app_bar"
                layout="@layout/app_bar" />

            <tabs.SlidingTabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <android.support.v4.view.ViewPager
                android:id="@+id/pager"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"/>





        </LinearLayout>
        <fragment
            android:id="@+id/fragment_navigation_drawer"
            android:layout_width="@dimen/nav_drawer_width"
            android:layout_height="match_parent"
            app:layout="@layout/fragment_navigation_drawer"
            android:layout_gravity="start"
            android:name="demo.demo2.NavigationDrawerFragment"
            tools:layout="@layout/fragment_navigation_drawer" />
    </android.support.v4.widget.DrawerLayout>







</LinearLayout>

And the error in the logcat

    5366-5366/demo.demo2 E/AndroidRuntime: FATAL EXCEPTION: main
                                                          Process: demo.demo2, PID: 5366
                                                          java.lang.RuntimeException: Unable to start activity ComponentInfo{demo.demo2/demo.demo2.Main3Activity}: java.lang.NullPointerException: Attempt to read from null array
                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                                                              at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                              at android.os.Looper.loop(Looper.java:135)
                                                              at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                              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:903)
                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                                                           Caused by: java.lang.NullPointerException: Attempt to read from null array
                                                              at demo.demo2.Main3Activity$MyPagerAdapter.getPageTitle(Main3Activity.java:63)
                                                              at tabs.SlidingTabLayout.populateTabStrip(SlidingTabLayout.java:198)
                                                              at tabs.SlidingTabLayout.setViewPager(SlidingTabLayout.java:142)
                                                              at demo.demo2.Main3Activity.onCreate(Main3Activity.java:45)
                                                              at android.app.Activity.performCreate(Activity.java:5990)
                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                                                              at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                              at android.os.Looper.loop(Looper.java:135) 
                                                              at android.app.ActivityThread.main(ActivityThread.java:5254) 
                                                              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:903) 
                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
01-19 02:03:52.050 5366-5366/demo.demo2 I/Process: Sending signal. PID: 5366 SIG: 9

Thank you in advance.

Bek
  • 2,206
  • 20
  • 35

1 Answers1

2

The problem is: at demo.demo2.Main3Activity$MyPagerAdapter.getPageTitle(Main3Activity.java:63)

You are never initializing or populating the tabs array but you attempt to use it in the getPageTitle(int position) method:

String[] tabs;

@Override
public CharSequence getPageTitle(int position) {
    return tabs[position];
}

I have initialized an in my strings.xml with the same name "tabs" . Will it not be able to reference that over here.

Naming a field the same name as a resource will not automatically load said resource.

If no, then am I supposed to initialize here in the code as, String[] tabs={"Tab1", "Tab2" ,"Tab3"}

You could but you can also load your string array from resources. You load resources through the Resources class. In this case you will likely use the getStringArray (int id) method:

class MyPagerAdapter extends FragmentPagerAdapter {
    String[] tabs;
    public MyPagerAdapter(FragmentManager fm) {
        super(fm);

        tabs = getResources().getStringArray(R.array.tabs);
    }
    // ...
}
Cory Charlton
  • 8,868
  • 4
  • 48
  • 68
  • I have initialized an in my strings.xml with the same name "tabs" . Will it not be able to reference that over here. If no, then am I supposed to initialize here in the code as, String[] tabs={"Tab1", "Tab2" ,"Tab3"}; – Aprajeeta Sinha Jan 19 '16 at 13:16
  • It worked. Thank you so very much. I had been stuck because of this since 2 weeks. – Aprajeeta Sinha Jan 20 '16 at 13:54