Cara memulai aktivitas baru pada klik tombol

Jawaban:

1117

Mudah.

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);

Ekstra diambil di sisi lain melalui:

@Override
protected void onCreate(Bundle savedInstanceState) {
    Intent intent = getIntent();
    String value = intent.getStringExtra("key"); //if it's a string you stored.
}

Jangan lupa menambahkan aktivitas baru Anda di AndroidManifest.xml:

<activity android:label="@string/app_name" android:name="NextActivity"/>
Emmanuel
sumber
18
Di mana bagian klik tombol? (klik tombol → transisi ke aktivitas berikutnya)
Jonny
4
@ Jonny: Ini contoh klik tombol. stackoverflow.com/a/7722428/442512
Emmanuel
8
Apakah ada perbedaan antara CurrentActivity.this.startActivity(myIntent)dan startActivity(myIntent)?
Bingung
5
Ya, mudah lol. Ada lebih banyak codemissing daripada kode yang sebenarnya diketik. Di mana semua antarmuka xml dan kode .java hilang? Downvote
Liquid Core
111
Liquid, apakah Anda ingin dia memasukkannya ke dalam apk juga? ;)
Casey Murray
60

Buat maksud untuk aktivitas ViewPerson dan berikan PersonID (untuk pencarian basis data, misalnya).

Intent i = new Intent(getBaseContext(), ViewPerson.class);                      
i.putExtra("PersonID", personID);
startActivity(i);

Kemudian di Aktivitas ViewPerson, Anda bisa mendapatkan bundel data tambahan, pastikan itu bukan nol (kalau-kalau Anda terkadang tidak meneruskan data), maka dapatkan datanya.

Bundle extras = getIntent().getExtras();
if(extras !=null)
{
     personID = extras.getString("PersonID");
}

Sekarang jika Anda perlu berbagi data antara dua Kegiatan, Anda juga dapat memiliki Global Singleton.

public class YourApplication extends Application 
{     
     public SomeDataClass data = new SomeDataClass();
}

Kemudian menyebutnya dalam aktivitas apa pun dengan:

YourApplication appState = ((YourApplication)this.getApplication());
appState.data.CallSomeFunctionHere(); // Do whatever you need to with data here.  Could be setter/getter or some other type of logic
Bryan Denny
sumber
58

Respons saat ini sangat bagus tetapi jawaban yang lebih komprehensif diperlukan untuk pemula. Ada 3 cara berbeda untuk memulai aktivitas baru di Android, dan semuanya menggunakan Intentkelas; Maksud | Pengembang Android .

  1. Menggunakan onClickatribut Button. (Pemula)
  2. Menetapkan OnClickListener()melalui kelas anonim. (Menengah)
  3. Metode aktivitas antarmuka luas menggunakan switchpernyataan. (Pro)

Inilah tautan ke contoh saya jika Anda ingin mengikuti:

1. Menggunakan onClickatribut Button. (Pemula)

Tombol memiliki onClickatribut yang ditemukan dalam file .xml:

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="goToAnActivity"
    android:text="to an activity" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="goToAnotherActivity"
    android:text="to another activity" />

Di kelas Java:

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

public void goToAnActivity(View view) {
    Intent intent = new Intent(this, AnActivity.class);
    startActivity(intent);
}

public void goToAnotherActivity(View view) {
    Intent intent = new Intent(this, AnotherActivity.class);
    startActivity(intent);
}

Keuntungan : Mudah dibuat dengan cepat, modular, dan dapat dengan mudah mengatur beberapa onClicks dengan maksud yang sama.

Kerugian : Sulit dibaca saat meninjau.

2. Menugaskan sebuah OnClickListener()melalui kelas anonim. (Menengah)

Ini adalah ketika Anda menetapkan terpisah setOnClickListener()untuk masing button- masing dan menimpa masing onClick()- masing dengan niatnya sendiri.

Di kelas Java:

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), AnActivity.class);
                view.getContext().startActivity(intent);}
            });

        Button button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), AnotherActivity.class);
                view.getContext().startActivity(intent);}
            });

Keuntungan : Mudah dibuat dengan cepat.

Kerugian : Akan ada banyak kelas anonim yang akan membuat keterbacaan sulit saat ditinjau.

3. Metode aktivitas antarmuka luas menggunakan switchpernyataan. (Pro)

Ini adalah ketika Anda menggunakan switchpernyataan untuk tombol Anda dalam onClick()metode untuk mengelola semua tombol Aktivitas.

Di kelas Java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.button1:
            Intent intent1 = new Intent(this, AnActivity.class);
            startActivity(intent1);
            break;
        case R.id.button2:
            Intent intent2 = new Intent(this, AnotherActivity.class);
            startActivity(intent2);
            break;
        default:
            break;
    }

Keuntungan : Manajemen tombol mudah karena semua maksud tombol terdaftar dalam satu onClick()metode


Untuk bagian kedua dari pertanyaan, mengirim data, silakan lihat Bagaimana cara mengirimkan data antara Aktivitas di aplikasi Android?

Martin Sing
sumber
Jawaban Luar Biasa, terima kasih! Anda tahu tentang penalti kinerja dengan menggunakan saran apa pun?
lmedinas
3
# 3 bukan "pro." Ini adalah opsi yang paling tidak dapat dibaca dan dipelihara, dan itu akan direactored menjadi # 1 atau # 2 oleh pengembang berpengalaman pertama yang melihatnya. (Atau mereka akan menggunakan Butterknife, yang merupakan pilihan # 1 pada steroid.)
Kevin Krumwiede
Saya pikir programmer pro tidak suka # 3 sama sekali. menempatkan, Idk, 10 tombol klik penangan dalam 1 metode adalah mimpi buruk dan tidak profesional sama sekali. metode dengan baris kode zilion tidak membuat Anda profesional. CIUMAN .
Mehdi Dehghani
3 jelas bukan "pro"
Kaiser Keister
36

Ketika pengguna mengklik tombol, langsung di dalam XML seperti itu:

<Button
         android:id="@+id/button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="TextButton"
         android:onClick="buttonClickFunction"/>

Dengan menggunakan atribut android:onClickkami menyatakan nama metode yang harus ada pada aktivitas induk. Jadi saya harus membuat metode ini di dalam aktivitas kami seperti itu:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}
IntelliJ Amiya
sumber
19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
vishal rangani
sumber
2
ini hanya sebagian jawaban. apalagi itu tidak cukup, yaitu tidak akan berfungsi tanpa modifikasi tambahan dalam proyek.
andr
10
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.
pengguna1923551
sumber
8

Emmanuel,

Saya pikir info tambahan harus dimasukkan sebelum memulai aktivitas jika tidak, data belum akan tersedia jika Anda mengaksesnya di metode onCreate dari NextActivity.

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);
pengguna1337489
sumber
7

Dari Aktivitas pengiriman coba kode berikut

   //EXTRA_MESSAGE is our key and it's value is 'packagename.MESSAGE'
    public static final String EXTRA_MESSAGE = "packageName.MESSAGE";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       ....

        //Here we declare our send button
        Button sendButton = (Button) findViewById(R.id.send_button);
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //declare our intent object which takes two parameters, the context and the new activity name

                // the name of the receiving activity is declared in the Intent Constructor
                Intent intent = new Intent(getApplicationContext(), NameOfReceivingActivity.class);

                String sendMessage = "hello world"
                //put the text inside the intent and send it to another Activity
                intent.putExtra(EXTRA_MESSAGE, sendMessage);
                //start the activity
                startActivity(intent);

            }

Dari Aktivitas penerima coba kode berikut:

   protected void onCreate(Bundle savedInstanceState) {
 //use the getIntent()method to receive the data from another activity
 Intent intent = getIntent();

//extract the string, with the getStringExtra method
String message = intent.getStringExtra(NewActivityName.EXTRA_MESSAGE);

Kemudian tambahkan saja kode berikut ke file AndroidManifest.xml

  android:name="packagename.NameOfTheReceivingActivity"
  android:label="Title of the Activity"
  android:parentActivityName="packagename.NameOfSendingActivity"
Alex Irabor
sumber
7
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
Mahtab
sumber
7

Coba metode sederhana ini.

startActivity(new Intent(MainActivity.this, SecondActivity.class));
Joseph Sarz
sumber
5

Anda dapat mencoba kode ini:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
Prinkal
sumber
4

Cara untuk memulai aktivitas baru adalah menyiarkan maksud, dan ada jenis niat tertentu yang dapat Anda gunakan untuk meneruskan data dari satu aktivitas ke aktivitas lainnya. Rekomendasi saya adalah Anda memeriksa dokumen pengembang Android yang terkait dengan maksud ; itu adalah banyak info tentang subjek, dan memiliki contoh juga.

Brian Driscoll
sumber
4

Kotlin

Aktivitas pertama

startActivity(Intent(this, SecondActivity::class.java)
  .putExtra("key", "value"))

Aktivitas kedua

val value = getIntent().getStringExtra("key")

Saran

Selalu masukkan kunci dalam file konstan untuk cara yang lebih terkelola.

companion object {
    val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
  .putExtra(PUT_EXTRA_USER, "value"))
Khemraj
sumber
4

Memulai aktivitas dari aktivitas lain adalah skenario yang sangat umum di antara aplikasi android.
Untuk memulai suatu aktivitas Anda memerlukan Intent objek .

Bagaimana cara membuat Objek Intent?

Objek niat mengambil dua parameter dalam konstruktornya

  1. Konteks
  2. Nama kegiatan yang akan dimulai. (atau nama paket lengkap)

Contoh:

masukkan deskripsi gambar di sini

Jadi misalnya, jika Anda memiliki dua aktivitas, katakan HomeActivitydan DetailActivitydan Anda ingin mulai DetailActivitydari HomeActivity (HomeActivity -> DetailActivity).

Berikut ini cuplikan kode yang menunjukkan cara memulai DetailActivity dari

BerandaAktivitas

Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);

Dan kamu sudah selesai.

Kembali ke bagian klik tombol.

Button button = (Button) findViewById(R.id.someid);

button.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View view) {
         Intent i = new Intent(HomeActivity.this,DetailActivity.class);
         startActivity(i);  
      }

});
Rohit Singh
sumber
3

Mulai aktivitas lain dari aktivitas ini dan Anda dapat mengirimkan parameter melalui Bundle Object juga.

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);

Retrive data dalam aktivitas lain (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");
DroidNinja
sumber
2

Terapkan antarmuka View.OnClickListener dan timpa metode onClick.

ImageView btnSearch;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search1);
        ImageView btnSearch = (ImageView) findViewById(R.id.btnSearch);
        btnSearch.setOnClickListener(this);
    }

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSearch: {
                Intent intent = new Intent(Search.this,SearchFeedActivity.class);
                startActivity(intent);
                break;
            }
pengguna1918566
sumber
2

Meskipun jawaban yang tepat telah diberikan tetapi saya di sini untuk mencari jawaban dalam bahasa Kotlin. Pertanyaan ini bukan tentang bahasa tertentu jadi saya menambahkan kode untuk menyelesaikan tugas ini dalam bahasa Kotlin.

Inilah cara Anda melakukan ini di Kotlin untuk andorid

testActivityBtn1.setOnClickListener{
      val intent = Intent(applicationContext,MainActivity::class.java)
      startActivity(intent)

 }
Abdul Rehman
sumber
2

Cara paling sederhana untuk membuka aktivitas dengan mengklik tombol adalah:

  1. Buat dua aktivitas di bawah folder res, tambahkan tombol ke aktivitas pertama dan beri nama untuk onclickberfungsi.
  2. Seharusnya ada dua file java untuk setiap aktivitas.
  3. Di bawah ini adalah kode:

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.content.Intent;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void goToAnotherActivity(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
}

SecondActivity.java

package com.example.myapplication;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1);
    }
}

AndroidManifest.xml (Cukup tambahkan blok kode ini ke yang sudah ada)

 </activity>
        <activity android:name=".SecondActivity">
  </activity>
sn n
sumber
1

Ambil Tombol di xml terlebih dahulu.

  <Button
        android:id="@+id/pre"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_launcher"
        android:text="Your Text"
        />

Jadikan daftar tombol.

 pre.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });
Jayesh Prajapati
sumber
1

Ketika tombol diklik:

loginBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent= new Intent(getApplicationContext(), NextActivity.class);
        intent.putExtra("data", value); //pass data
        startActivity(intent);
    }
});

Untuk menerima data tambahan dari NextActivity.class:

Bundle extra = getIntent().getExtras();
if (extra != null){
    String str = (String) extra.get("data"); // get a object
}
Hasib Akter
sumber
1

Tulis kode dalam aktivitas pertama Anda.

button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


Intent intent = new Intent(MainActivity.this, SecondAcitvity.class);
                       //You can use String ,arraylist ,integer ,float and all data type.
                       intent.putExtra("Key","value");
                       startActivity(intent);
                        finish();
            }
         });

Di secondActivity.class

String name = getIntent().getStringExtra("Key");
Gyan Swaroop Awasthi
sumber
1

Tempatkan widget tombol di xml seperti di bawah ini

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

Setelah itu inisialisasi dan tangani pendengar klik pada Kegiatan seperti di bawah ini ..

Dalam metode Activity On Create:

Button button =(Button) findViewById(R.id.button); 
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       Intent intent = new 
            Intent(CurrentActivity.this,DesiredActivity.class);
            startActivity(intent);
    }
});
prakash421
sumber