简体   繁体   中英

Android Studio Multiple onCreate methods in MainActivity.java

For a school project I am creating a simple app. However, I run into one problem to finalize the app.

I've been trying to make two buttons on my main layout. The buttons are supposed to open a second layout, one called barcode_scanner.xml and another called vragen.xml

However, only the first button opens the scanner. The second button does not do anything.

This is my current code from MainActivity.java

package com.kvprasad.zbarbarcodescanner;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button scannerButton;

@Override
        //Barcodescanner knop
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button next = (Button) findViewById(R.id.scannerButton);
            next.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    Intent myIntent = new Intent(view.getContext(), BarcodeScanner.class);
                    startActivityForResult(myIntent, 0);
                }
            });
        }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }








public class bovenbouw extends MainActivity{

    @Override
                public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    Button next = (Button) findViewById(R.id.bovenbutton);
                    next.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View view) {
                            Intent myIntent = new Intent(view.getContext(), Vragen.class);
                            startActivityForResult(myIntent, 0);}});}}}

I don't see any problems in the code. What am I possibly doing wrong? Thank you.

Do not make multiple onCreate methods for the same activity. Handle all your button clicks in the same onCreate method. What you can do is this:

package com.kvprasad.zbarbarcodescanner;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

private Button scannerButton;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
//Barcodescanner knop
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button next1 = (Button) findViewById(R.id.scannerButton);
    next.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent myIntent = new Intent(view.getContext(), BarcodeScanner.class);
            startActivityForResult(myIntent, 0);
        }
    });

    Button next2 = (Button) findViewById(R.id.bovenbutton);
    next.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent myIntent = new Intent(view.getContext(), Vragen.class);
            startActivityForResult(myIntent, 0);}

        });
    }
}

You don't need 2 onCreate() methods for two buttons. As both of them are in the same layout, you can set onClickListener on both of them in one method only.

public class MainActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button next = (Button) findViewById(R.id.scannerButton);
        next.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent myIntent = new Intent(this, BarcodeScanner.class);
                startActivityForResult(myIntent, 0);
            }
        });

        Button next1 = (Button) findViewById(R.id.bovenbutton);
        next.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent myIntent = new Intent(this, Vragen.class);
                startActivityForResult(myIntent, 1); 
                //Make sure the second parameter is not 0, so that you can differentiate between them in onActivityReult method.
            }
        });
    }
}

You don't have to create another class for vragen.class after bovenbutton is pressed. just create another button for bovenbutton in the main class oncreate method besides the scanner_button

@Override
//Barcodescanner knop
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button next = (Button) findViewById(R.id.scannerButton);
    Button vragen = (Button) findViewById(R.id.bovenbutton);//button for vragen
    next.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent myIntent = new Intent(view.getContext(), BarcodeScanner.class);
            startActivityForResult(myIntent, 0);
        }
    });
   //here goes the onclicklistener for vragen button
   vragen.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent myIntent = new Intent(view.getContext(), Vragen.class);
            startActivityForResult(myIntent, 0);
        }
    });
}

You're not supposed to register two Activities in single .java file. You must create separate Activity.

package com.example.photosapp

import android.support.v7.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

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