Comment ouvrir une deuxième activité en cliquant sur un bouton dans l'application Android


96

J'apprends à créer des applications Android et j'ai besoin d'une aide spécifique. Je n'arrive pas à comprendre quels bits de code de modèle je dois changer et quels bits sont statiques.

Dans le dossier LAYOUT , j'ai mon ACTIVITY_MAIN.XML qui lit

 <?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>

Ensuite, j'ai ma deuxième activité ACTIVITY_SEND_PHOTOS.XML qui est

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

J'ai alors mon MainActivity.java (est-ce le .class?) Cela lit le package 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
 }
 }

puis mon fichier SendPhotos.java qui est;

 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);
 }

 }

Je voudrais que le bouton de mon activité principale soit lié à mon activité sendphotos, ouvrant simplement cette activité, rien d'extraordinaire, n'envoyant aucune donnée ou quoi que ce soit.

Je sais que quelque part j'ai besoin de mon

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

mais je n'ai aucune idée de quoi remplacer ToActivity.class ou de quoi d'autre j'ai besoin où.



1
ToActivity.class est le nom de votre deuxième activité
Niranj Patel

Cela peut être la meilleure source pour vous
Usama Sadiq

La classe d'intention n'a pas de constructeur qui accepte deux classes comme argment !. que devrais-je faire?
Emad Aghayi

Réponses:


155

Vous pouvez passer à l'activité souhaitée en cliquant sur le bouton. ajoutez simplement cette ligne.

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

Dans votre activité principale, ajoutez simplement cette méthode:

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

Et le plus important: n'oubliez pas de définir votre activité en manifest.xml

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

3
Vous devez ajouter >le tag d'activité
Mageek

2
Cela ne fonctionne pas pour moi. Les View, Intentet les noms d'activité sont en rouge. Dois-je importer quelque chose pour View?
Srujan Barai

1
@SrujanBarai oui, les deux importent android.view.View; et importez android.content.Intent; doit être importé
William Reed

Cela a bien fonctionné pour moi. Cependant n'a-t-il pas besoin d'un setOnClickListener () sur son bouton?
Evaggelos Manousakis

1
@VaggelisManousakis non ce n'est pas nécessaire car il est déjà là en xmlandroid:onClick="sendMessage"
juin

30

Essaye ça

  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);
                    }
                });

 }

mais où? Je reçois des erreurs partout Si j'essaie de placer cela avec le .java en éclipse
Henry Aspden

@HenryAspden importent onclocklistener et Button.
JD

@HenryAspden a mis ce code après onCreate et après avoir trouvé votre identifiant.
JD

@HenryAspden j'ai édité mon code maintenant essayez ceci. J'ai mis ce code dans onCreate essayez de cette façon.
JD

11

De l'activité: où êtes-vous actuellement?

À l'activité: où voulez-vous aller?

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

Les deux activités doivent être incluses dans le fichier manifeste, sinon il ne trouvera pas le fichier de classe et fermera Force.

Modifiez votre Mainactivity.java

crate button's object;

Maintenant, écrivez le code pour l'événement de 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
                }
   });

J'espère que cela fonctionnera pour vous.


cela va-t-il dans la mise en page ou le .java?
Henry Aspden

ok, vous pouvez mettre ce code dans l'événement de clic du bouton dans le fichier principal 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 réponse pour le noob complet d'un noob complet: MainActivityest le nom de la première activité. MainActivity2est le nom de la deuxième activité. button1est l'ID du bouton en xml pour MainActivityActivity.


1
juste pour aider les autres ... par "nom du bouton" faites-vous référence à l'ID?
Henry Aspden

En effet . Corrigé pour refléter votre recommandation
iAmNotVeryGoodAtThis

5

suivez simplement cette étape (je n'écris pas de code juste Bcoz vous pouvez faire du copier-coller et ne pas apprendre).

  1. tout d'abord, vous devez déclarer un bouton que vous avez dans la mise en page

  2. Faites référence à ce bouton en trouvant son identifiant (en utilisant findviewById) dans oncreate

  3. setlistener pour bouton (comme setonclick listener)

  4. gérer en dernier l'événement de clic (signifie démarrer une nouvelle activité en utilisant l'intention comme vous le savez déjà)

  5. N'oubliez pas d'ajouter l'activité dans le fichier manifeste

BTW c'est juste simple, je voudrais vous suggérer que commencer simplement à partir de simples tutoriels disponibles sur le net sera mieux pour vous.

Bonne chance pour Android


3

Remplacez le code de ligne ci-dessous:

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);
            }
        }
     }

Ajoutez les lignes ci-dessous dans votre fichier manifeste:

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

3

Remplacez votre MainActivity.class par ce code

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);
    }
 }
 )
}

Ajoutez ces codes dans votre AndroidManifest.xml après </activity>et avant</application>

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

2

Cela fonctionne toujours, l'un ou l'autre devrait être très bien:

@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

ajoutez le code ci-dessous au fichier 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" />

et ajoutez simplement la méthode ci-dessous au fichier MainActivity.java:

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

Vous avez une faute de frappe, un point d'interrogation avant le nom du fichier
Mathieu VIALES

Désolé pour l'erreur
Md Nakibul Hassan

1

Si vous avez deux boutons et que vous avez le même appel d'identifiant pour vos événements de clic de bouton comme ceci:

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) {

        }
    });

Lorsque vous avez cliqué button1, button2cela fonctionnera et vous ne pourrez pas ouvrir votre deuxième activité.


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

EN CODE 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

Vous pouvez passer à l'activité souhaitée en cliquant sur le bouton. il suffit d'ajouter
android: onClick = "timerApp" cette ligne.

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

Dans votre activité principale, ajoutez simplement cette méthode:

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

OU dans la méthode onCreate (), ajoutez le code ci-dessous

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);       
    }  
});
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.