简体   繁体   中英

Putting multiple onClickListener and OnClick in the same activity

I am trying to setup multiple buttons but I seem to be having trouble doing it. I have 2 onClickListener functions in the same activity. Am I right in doing this or should this be done some other way? btnChpt3 works but when I input the onclicklistener for btnChpt3_1 it force closes as soon as it opens. Thanks.

MainMenu.java

 package com.th3ramr0d.learnar670_1;

 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.Button;

 public class MainMenu extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button chapterThree = (Button) findViewById(R.id.btnChpt3); 

    chapterThree.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            startActivity(new Intent(MainMenu.this, Chapter3.class));

        }
    });


    Button chapterThree_1 = (Button) findViewById(R.id.btnChpt3_1);

    chapterThree_1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            startActivity(new Intent(MainMenu.this, Chapter3_1.class));

        }
    });

 }


 @Override
 protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
 }

 }

So I added a new class to handle the buttons on a sub menu page. But now I am running into the same problem I was previously where the button wont open. I am guessing its because the code isnt being ran for some reason.

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.th3ramr0d.learnar670_1"
 android:versionCode="1"
 android:versionName="1.0" >

 <uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="21" />

 <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainMenu"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

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

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

    <activity
        android:name=".Chapter3"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.th3ramr0d.learnar670_1.CHAPTER3" />

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



    <activity
        android:name=".Chapter4"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.th3ramr0d.learnar670_1.CHAPTER4" />

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


 </application>

 </manifest>

You can see here that my .MainMenu launches. I am guessing that means it launches at startup. So the button works. However, now I want the button associated with .SubMenuChapter3 to launch and it does nothing. Here Program runs with no errors but button wont open you can see I had the same problem until codepg was nice enough to tell me where I was wrong. But I want to use several of these sub menus so how would I do that?

I can see from your comments that you are inflating the view activity_main but Button with id bthChpt3_1 is in another file. This is an error as you can use findViewById(R.id.buttonId) to find the id of a button which exists within the view you are using. Since the button is in another xml file, it will throw a null pointer exception.

Your problem, after reading, is that you are referencing a button that you have created in another layout which you are not inflating.

In the setContentView(R.layout.activity_main); you are inflating activity_main so you can only have onclick listeners for buttons and elements in that xml.

Make sure that you add btnChpt3 in this xml or if this button is supposed too be in another layout then have another activity or fragment control that layout by inflating it.

Right now this method Button chapterThree = (Button) findViewById(R.id.btnChpt3); is returning a null pointer exception.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM