Come aprire una seconda attività facendo clic sul pulsante nell'app Android


96

Sto imparando a creare applicazioni Android e ho bisogno di un aiuto specifico. Non riesco a capire quali bit di codice modello devo modificare e quali bit sono statici.

Nella cartella LAYOUT ho il mio ACTIVITY_MAIN.XML che legge

 <?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"
 android:orientation="horizontal">

 <Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/main_buttons_photos" />

 </LinearLayout>

Successivamente, ho la mia seconda attività ACTIVITY_SEND_PHOTOS.XML che è

 <RelativeLayout 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" >

 <TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="@string/hello_world"
    tools:context=".SendPhotos" />

 <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="@string/title_activity_send_photos"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 </RelativeLayout>

Quindi ho il mio MainActivity.java (è questo il .class?) Questo legge il pacchetto com.example.assent.bc;

 import android.os.Bundle;
 import android.app.Activity;
 import android.view.Menu;
 import android.view.View;

 public class MainActivity extends Activity {

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

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.activity_main, menu);
     return true;
 }
 /** Called when the user clicks the Send button */
 public void sendMessage(View view) {
     // Do something in response to button
 }
 }

e poi il mio file SendPhotos.java che è;

 package com.example.assent.bc;

 import android.os.Bundle;
 import android.app.Activity;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.support.v4.app.NavUtils;

 public class SendPhotos extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_send_photos);
    getActionBar().setDisplayHomeAsUpEnabled(true);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_send_photos, menu);
    return true;
 }


 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
    }
    return super.onOptionsItemSelected(item);
 }

 }

Vorrei che il pulsante nella mia attività principale si collegasse alla mia attività sendphotos, semplicemente aprendo quell'attività, niente di speciale, senza inviare dati o altro.

So che da qualche parte ho bisogno del mio

 Intent i = new Intent(FromActivity.this, ToActivity.class);
 startActivity(i);

ma non ho idea di cosa sostituire ToActivity.class con o cos'altro mi serve dove.



1
ToActivity.class è il nome della tua seconda attività
Niranj Patel

Questa può essere la fonte migliore per te
Usama Sadiq

La classe Intent non ha alcun costruttore che accetti due classi come argomento !. cosa dovrei fare?
Emad Aghayi

Risposte:


156

È possibile passare all'attività desiderata facendo clic sul pulsante. basta aggiungere questa riga.

android:onClick="sendMessage"

xml:

 <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="sendMessage"
        android:text="@string/button" />

Nella tua attività principale aggiungi semplicemente questo metodo:

public void sendMessage(View view) {
    Intent intent = new Intent(FromActivity.this, ToActivity.class);
    startActivity(intent);
}

E la cosa più importante: non dimenticare di definire la tua attività in manifest.xml

 <activity>
      android:name=".ToActivity"
      android:label="@string/app_name">          
 </activity>

3
È necessario aggiungere >il tag attività
Mageek

2
Questo non funziona per me. I View, Intentei nomi di attività sono in rosso. Devo importare qualcosa per View?
Srujan Barai

1
@SrujanBarai sì, entrambi importano android.view.View; e importa android.content.Intent; deve essere importato
William Reed

Ha funzionato bene per me. Tuttavia non ha bisogno di un setOnClickListener () sul suo pulsante?
Evaggelos Manousakis

1
@VaggelisManousakis no non è richiesto perché è già lì in xmlandroid:onClick="sendMessage"
Juned

30

Prova questo

  Button button;

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

button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent i = new Intent(getApplicationContext(),SendPhotos.class);
                        startActivity(i);
                    }
                });

 }

ma dove? Ricevo errori dappertutto Se provo a posizionarlo all'interno del .java in eclipse
Henry Aspden

@HenryAspden importa onclocklistener e Button.
JD

@HenryAspden ha inserito questo codice dopo onCreate e dopo aver trovato il tuo ID.
JD

@HenryAspden ho modificato il mio codice ora provalo. ho messo questo codice in onCreate provare in questo modo.
JD

11

Dall'attività: dove ti trovi attualmente?

All'attività: dove vuoi andare?

Intent i = new Intent( MainActivity.this, SendPhotos.class); startActivity(i);

Entrambe le attività devono essere incluse nel file manifest altrimenti non troverà il file di classe e genererà la chiusura forzata.

Modifica il tuo Mainactivity.java

crate button's object;

ora Scrivi il codice per l'evento clic.

        Button btn = (button)findViewById(R.id.button1);
         btn.LoginButton.setOnClickListener(new View.OnClickListener() 
       {

                @Override
                public void onClick(View v) 
                {
                 //put your intent code here
                }
   });

Spero che funzioni per te.


va nel layout o nel .java?
Henry Aspden

ok puoi inserire questo codice nell'evento clic del pulsante nel file main activity.java
Chintan Khetiya

11
Button btn = (Button) findViewById(R.id.button1);

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent myIntent = new Intent(MainActivity.this, MainActivity2.class);
        MainActivity.this.startActivity(myIntent);       
    }  
});

La risposta per il noob completo da un noob completo: MainActivityè il nome della prima attività. MainActivity2è il nome della seconda attività. button1è l'ID del pulsante in xml per MainActivityActivity.


1
solo per aiutare gli altri ... con "nome del pulsante" ti riferisci all'ID?
Henry Aspden

Infatti . Corretto per riflettere la tua raccomandazione
iAmNotVeryGoodAtThis

5

segui questo passaggio (non sto scrivendo codice solo Bcoz puoi fare copia e incolla e non puoi imparare) ..

  1. prima di tutto devi dichiarare un pulsante che hai nel layout

  2. Fai riferimento a quel pulsante trovando il suo id (usando findviewById) in oncreate

  3. setlistener per il pulsante (come setonclick listener)

  4. ultima gestione dell'evento clic (significa avviare una nuova attività utilizzando l'intento come già sai)

  5. Non dimenticare di aggiungere attività nel file manifest

A proposito questo è solo semplice, vorrei suggerirti che iniziare da semplici tutorial disponibili in rete sarà meglio per te ..

Buona fortuna per Android


3

Sostituisci il codice della riga sottostante:

import android.view.View.OnClickListener;
public class MainActivity extends Activity implements OnClickListener{
   Button button;
    @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(this);
      }
       public void onClick(View v) {
        if(v.getId==R.id.button1){
      Intent i = new Intent(FromActivity.this, ToActivity.class);
               startActivity(i);
            }
        }
     }

Aggiungi le seguenti righe nel tuo file manifest:

   <activity android:name="com.packagename.FromActivity"></activity>
   <activity android:name="com.packagename.ToActivity"></activity>

3

Sostituisci il tuo MainActivity.class con questo codice

public class MainActivity extends Activity {

Button b1;
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 b1=(Button)findViewById(R.id.button1);
 b1.setOnClickListener(new View.onClickListener()
 {
  public void onClick(View v)
   {
       Intent i=new Intent(getApplicationContext(),SendPhotos.class);
       startActivity(i);
    }
 }
 )
}

Aggiungi questi codici nel tuo AndroidManifest.xml dopo </activity>e Prima</application>

<activity android:name=".SendPhotos"></activity>

2

Funziona sempre, uno dei due dovrebbe andare bene:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Button btn = (Button) findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick (View v) {
            startActivity(new Intent("com.tobidae.Activity1"));
        }
        //** OR you can just use the one down here instead, both work either way
        @Override
        public void onClick (View v){
            Intent i = new Intent(getApplicationContext(), ChemistryActivity.class);
            startActivity(i);
        }
    }
}

2

aggiungi sotto il codice al file activity_main.xml:

<Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="buttonClick"
        android:text="@string/button" />

e aggiungi semplicemente il metodo seguente al file MainActivity.java:

public void buttonClick(View view){
  Intent i = new Intent(getApplicationContext()SendPhotos.class);
  startActivity(i);
}

Hai un errore di battitura, un punto interrogativo prima del nome del file
Mathieu VIALES

Ci

1

Se hai due pulsanti e hai la stessa chiamata ID per gli eventi di clic del pulsante come questo:

Button btn1;
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(MainActivity.this,target.class);
            startActivity(intent);
        }
    });

    btn2=(Button) findViewById(R.id.button1);//Have same id call previous button---> button1

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

        }
    });

Quando hai cliccato button1, button2funzionerà e non potrai aprire la tua seconda attività.


1
 <Button
            android:id="@+id/btnSignIn"
            android:layout_width="250dp"
            android:layout_height="40dp"
            android:layout_marginEnd="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="16dp"
            android:background="@drawable/circal"
            android:text="Sign in"
            android:textColor="@color/white"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/etPasswordLogin" />

IN CODICE JAVA

Button signIn= (Button) findViewById(R.id.btnSignIn);

signIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(SignInPage.this,MainActivity.class));
            }
        });

}


1

È possibile passare all'attività desiderata facendo clic sul pulsante. basta aggiungere
android: onClick = "timerApp" questa riga.

xml:

 <Button
        android:id="@+id/timer_app"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="timerApp"
        android:text="Click To run Timer Activity" />

Nella tua attività principale aggiungi semplicemente questo metodo:

 public void timerApp(View view){
        Intent intent= new Intent(MainActivity.this,TimerActivity.class);
        startActivity(intent);
    }

O nel metodo onCreate () aggiungi sotto il codice

Button btn =findViewById(R.id.timer_app);//Don't need to type casting in android studio 3

btn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, TimerActivity.class);
        startActivity(intent);       
    }  
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.