So öffnen Sie eine zweite Aktivität auf Knopfdruck in der Android App


96

Ich lerne Android-Anwendungen zu erstellen und benötige spezielle Hilfe. Ich kann mir nicht vorstellen, welche Teile des Vorlagencodes ich ändern muss und welche statisch sind.

Im LAYOUT- Ordner habe ich meine ACTIVITY_MAIN.XML, die liest

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

Als nächstes habe ich meine zweite Tätigkeit ACTIVITY_SEND_PHOTOS.XML welche

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

Ich habe dann meine MainActivity.java (ist das die .class?), Die das Paket com.example.assent.bc liest;

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

und dann meine SendPhotos.java- Datei, die ist;

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

 }

Ich möchte, dass die Schaltfläche in meiner Hauptaktivität auf meine Sendphotos-Aktivität verweist und diese Aktivität einfach öffnet, nichts Besonderes, keine Daten oder irgendetwas sendet.

Ich weiß, dass ich irgendwo meine brauche

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

Aber ich habe keine Ahnung, durch was ich ToActivity.class ersetzen soll oder was ich sonst noch wo brauche.



1
ToActivity.class ist Ihr zweiter Aktivitätsname
Niranj Patel

Dies kann die beste Quelle für Sie sein
Usama Sadiq

Intent-Klasse hat keinen Konstruktor, der zwei Klassen als Argument akzeptiert!. was soll ich machen?
Emad Aghayi

Antworten:


155

Sie können mit einem Klick auf die Schaltfläche zur gewünschten Aktivität wechseln. Fügen Sie einfach diese Zeile hinzu.

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

Fügen Sie in Ihrer Hauptaktivität einfach diese Methode hinzu:

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

Und das Wichtigste: Vergessen Sie nicht, Ihre Aktivität in zu definieren manifest.xml

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

3
Sie müssen >in der Aktivität Tag
Mageek

2
Das funktioniert bei mir nicht. Die View, Intentund die Aktivitätsnamen sind in rot. Muss ich etwas für View importieren?
Srujan Barai

1
@SrujanBarai ja, beide importieren android.view.View; und android.content.Intent importieren; muss importiert werden
William Reed

Es hat gut funktioniert für mich. Benötigt er jedoch keinen setOnClickListener () auf seiner Schaltfläche?
Evaggelos Manousakis

1
@VaggelisManousakis nein, es ist nicht erforderlich, da es bereits in xml vorhanden istandroid:onClick="sendMessage"
Juned

30

Versuche dies

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

 }

aber wo? Ich bekomme überall Fehler Wenn ich versuche, dies mit der .java in Eclipse zu platzieren
Henry Aspden

@ HenryAspden import onclocklistener und Button.
JD

@HenryAspden hat diesen Code nach onCreate und nach dem Finden Ihrer ID eingefügt.
JD

@ HenryAspden Ich habe meinen Code jetzt bearbeitet, versuche dies. Ich habe diesen Code in onCreate gesetzt. Versuchen Sie es auf diese Weise.
JD

11

Aus Aktivität: Wo bist du gerade?

Zur Aktivität: Wohin möchten Sie gehen?

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

Beide Aktivitäten müssen in der Manifestdatei enthalten sein, da sonst die Klassendatei nicht gefunden und Force close geschlossen wird.

Bearbeiten Sie Ihre Mainactivity.java

crate button's object;

Schreiben Sie jetzt Code für das Klickereignis.

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

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

Hoffe es wird für dich funktionieren.


Geht das in das Layout oder in die .java?
Henry Aspden

OK, Sie können diesen Code in das Klick-Ereignis der Schaltfläche in der Datei main activity.java
einfügen

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

Die Antwort für den vollständigen Noob von einem vollständigen Noob: MainActivityist der Name der ersten Aktivität. MainActivity2ist der Name der zweiten Aktivität. button1ist die ID der Schaltfläche in XML für MainActivityAktivität.


1
Nur um anderen zu helfen ... Beziehen Sie sich mit "Name der Schaltfläche" auf die ID?
Henry Aspden

Tatsächlich . Korrigiert, um Ihre Empfehlung widerzuspiegeln
iAmNotVeryGoodAtThis

5

Folgen Sie einfach diesem Schritt (ich schreibe keinen Code, nur weil Sie kopieren und einfügen können und nicht lernen können).

  1. Zunächst müssen Sie eine Schaltfläche deklarieren, die Sie im Layout haben

  2. Verweisen Sie auf diese Schaltfläche, indem Sie ihre ID (mithilfe von findviewById) in oncreate suchen

  3. setlistener für button (wie setonclick listener)

  4. Zuletzt das Klickereignis behandeln (bedeutet, dass Sie eine neue Aktivität mit Absicht starten, wie Sie bereits wissen).

  5. Vergessen Sie nicht, Aktivitäten in die Manifestdatei aufzunehmen

Übrigens ist dies nur einfach. Ich möchte Ihnen vorschlagen, dass es für Sie besser ist, einfach mit einfachen Tutorials zu beginnen, die im Internet verfügbar sind.

Viel Glück für Android


3

Ersetzen Sie den folgenden Zeilencode:

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

Fügen Sie die folgenden Zeilen in Ihre Manifestdatei ein:

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

3

Ersetzen Sie Ihre MainActivity.class durch diesen 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);
    }
 }
 )
}

Fügen Sie diesen Code in Ihr AndroidManifest.xml nach dem </activity>und vor</application>

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

2

Das funktioniert immer, beides sollte in Ordnung sein:

@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

Fügen Sie den folgenden Code zur Datei activity_main.xml hinzu:

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

und fügen Sie einfach die folgende Methode zur Datei MainActivity.java hinzu:

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

Sie haben einen Tippfehler, ein Fragezeichen vor dem Namen der Datei
Mathieu VIALES

Entschuldigung für den Fehler
Md Nakibul Hassan

1

Wenn Sie zwei Schaltflächen haben und denselben ID-Aufruf für Ihre Schaltflächen haben, klicken Sie auf folgende Ereignisse:

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

        }
    });

Wenn Sie auf geklickt haben button1, button2funktioniert dies und Sie können Ihre zweite Aktivität nicht öffnen.


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

IM JAVA-CODE

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

Sie können mit einem Klick auf die Schaltfläche zur gewünschten Aktivität wechseln. füge einfach
android hinzu: onClick = "timerApp" diese Zeile.

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

Fügen Sie in Ihrer Hauptaktivität einfach diese Methode hinzu:

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

ODER fügen Sie in der onCreate () -Methode den folgenden Code hinzu

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);       
    }  
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.