-3

Im making ViewPager with buttons. Im trying to get the id of button and set onclicklistener to that button in viewpager class.

I have one problem. I tried something like this `

Button btn1 = (Button) findViewById(R.id.gimnazijablbtn1);

btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                switch(v.getId()) {

                    case R.id.gimnazijablbtn1:
                        Intent Banjaluka = new Intent(banjaluka_activity.this,PocetniActivity.class);
                        startActivity(Banjaluka);
                        break;
                }

            }
        });`

But my app is crashing.

Here is the log 04-24 20:46:42.574 24297-24297/com.electroniccode.ln.vodickrozzanimanja E/AndroidRuntime: FATAL EXCEPTION: main Process: com.electroniccode.ln.vodickrozzanimanja, PID: 24297 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.electroniccode.ln.vodickrozzanimanja/com.electroniccode.ln.vodickrozzanimanja.banjaluka_activity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) at android.app.ActivityThread.access$900(ActivityThread.java:157) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5551) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:117) at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149) at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:29) at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:54) at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:31) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:200) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183) at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519) at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) at com.electroniccode.ln.vodickrozzanimanja.banjaluka_activity.<init>(banjaluka_activity.java:46) at java.lang.Class.newInstance(Native Method) at android.app.Instrumentation.newActivity(Instrumentation.java:1068) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2329) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)  at android.app.ActivityThread.access$900(ActivityThread.java:157)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5551)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

2 Answers2

1

try this. You were initializing your button outside of onCreate method. View should be initialized inside onCreate after setContentView(R.layout.activity_banjaluka_activity);

Button btn1;

/**
 * The {@link ViewPager} that will host the section contents.
 */
private ViewPager mViewPager;


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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    // Create the adapter that will return a fragment for each of the three
    // primary sections of the activity.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));


    btn1 = (Button) findViewById(R.id.gimnazijablbtn1);
    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

           Intent Banjaluka = new Intent(banjaluka_activity.this,PocetniActivity.class);
                    startActivity(Banjaluka);
                    break;
        }
    });
}
Ahmad Ayyaz
  • 774
  • 8
  • 25
0

3 simple suggestions:

  1. Get and setup your views like texts and buttons in the method onPostCreate.
  2. You are setting the OnClickListener correctly, but you don't need to filter for the view id since your listener will only be called for the view you set it on.
  3. I would suggest to make your activity to implement View.OnClickListener and pass it as listener for all the views you want to listen to. Then you can do a switch statement for your views ids and execute your custom actions.
Benny
  • 1,650
  • 17
  • 20