101 votes

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

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

Dans le LAYOUT dossier, j'ai mon ACTIVITÉ_MAIN.XML qui se lit comme suit

 <?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é ACTIVITÉ_ENVOI_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 ensuite mon MainActivity.java (s'agit-il de la classe .class ?), on peut lire ceci paquet 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
 }
 }

et ensuite mon 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);
 }

 }

J'aimerais que le bouton de mon activité principale soit lié à mon activité d'envoi de photos, ouvrant simplement cette activité, rien d'extraordinaire, pas d'envoi de données ou autre.

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 ce qu'il faut remplacer ToActivity.class avec ou ce que j'ai besoin d'autre où.

166voto

juned Points 1846

Vous pouvez passer à l'activité souhaitée en cliquant sur le bouton. Il suffit d'ajouter 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>

30voto

J.D. Points 1288

Essayez ceci

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

 }

13voto

chintan khetiya Points 5941

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

To Activity : 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 lancera Force close.

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 vous conviendra.

11voto

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 de la part d'un noob complet : MainActivity est le nom de la première activité. MainActivity2 est le nom de la deuxième activité. button1 est l'I.D. du bouton en xml pour MainActivity Activité.

5voto

Kalpesh Lakhani Points 589

Il suffit de suivre cette étape (je n'écris pas le code juste parce que vous pouvez faire des 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. Donnez une référence à ce bouton en trouvant son id (en utilisant findviewById) dans oncreate

  3. setlistener pour le bouton (comme setonclick listener)

  4. enfin, gérer l'événement de clic (ce qui 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 de commencer par des tutoriels simples disponibles. sur le net sera mieux pour vous

Meilleure chance pour Android

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X