Soru Düğme tıklamasıyla yeni etkinlik nasıl başlatılır?


Bir Android uygulamasında, başka bir etkinlikteki düğme tıklandığında yeni bir etkinliği (GUI) nasıl başlatırsınız ve bu iki etkinlik arasında veriyi nasıl iletirsiniz?


501
2017-11-15 15:43


Menşei




Cevaplar:


Kolay.

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

Diğer taraftaki ekstralar şu yollarla alınır:

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

Yeni etkinliğinizi AndroidManifest.xml dosyasında eklemeyi unutmayın:

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

910
2017-11-15 15:51



Düğme nerede tıklanır? (tuşa tıklayın → sonraki etkinliğe geçiş) - Jonny
@Jonny: İşte bir tuşa tıklama örneği. stackoverflow.com/a/7722428/442512 - Emmanuel
Arasında bir fark var mı CurrentActivity.this.startActivity(myIntent) ve startActivity(myIntent)? - Confuse
Evet, kolay lol. Aslında yazılan koddan daha fazla borçlandırma var. Tüm xml arabirimi ve .java kodu nerede eksik? downvote - Liquid Core
Likit, onu da bir apk haline getirmesini ister misiniz? ;) - Casey Murray


Bir ViewPerson etkinliğine bir amaç oluşturun ve PersonID'yi (örneğin bir veritabanı araması için) iletin.

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

Daha sonra ViewPerson Activity uygulamasında, fazladan veri paketi alabilir, null olmadığından emin olun (bazen veri aktarmıyorsanız), ardından verileri alın.

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

Şimdi iki Etkinlik arasında veri paylaşmanız gerekiyorsa, Global Singleton da olabilir.

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

Ardından, herhangi bir etkinlikte şuna göre ara:

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

46
2017-11-15 16:07





Mevcut yanıtlar harika ama yeni başlayanlar için daha kapsamlı bir cevap gerekiyor. Android'de yeni bir etkinlik başlatmak için 3 farklı yol var ve hepsi Intent sınıf; Niyet | Android Geliştiricileri.

  1. Kullanmak onClick Düğme özniteliği. (Acemi)
  2. Atama OnClickListener() anonim bir sınıf yoluyla. (Orta düzey)
  3. Kullanarak aktivite geniş arayüz yöntemi switch Beyan. (Pro)

İzlemek isterseniz, örneğimin bağlantısı: https://github.com/martinsing/ToNewActivityButtons

 1. kullanarak onClick Düğme özniteliği. (Acemi)

Düğmeler var bir onClick .xml dosyasında bulunan özellik:

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

Java sınıfında:

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

Avantaj: Sinek üzerinde kolay, modüler ve kolay bir şekilde birden fazla onClicks'i aynı amaçlara kolayca ayarlayabilir.

Dezavantaj: İnceleme yaparken zor okunabilirlik.

 2. atama OnClickListener() anonim bir sınıf yoluyla. (Orta düzey)

Bu, ayrı bir ayar yaptığınız zamandır setOnClickListener() her birine button ve her birini geçersiz kıl onClick() kendi amacı ile.

Java sınıfında:

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

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

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

Avantaj: Sinek üzerinde yapmak kolay.

Dezavantaj: gözden geçirirken okunabilirliği zorlaştıracak çok sayıda anonim sınıf olacaktır.

 3. kullanarak etkinlik geniş arayüz yöntemi switch Beyan. (Pro)

Bu, bir switch içindeki düğmelerinizin ifadesi onClick() Tüm Etkinlik düğmelerini yönetmek için yöntem.

Java sınıfında:

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

    button1 = (Button) findViewById(R.id.button1);
    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;
    }

Avantaj: Tüm düğme amaçları tek bir kayıtta kayıtlı olduğundan kolay düğme yönetimi onClick() yöntem


Sorunun ikinci kısmı için veri iletiliyor, lütfen bkz. Android uygulamasında Etkinlikler arasındaki veriyi nasıl geçiririm?


39
2017-12-30 02:14



Tam olarak mükemmel iş. - sparkyShorts
Açıkça her şeyi açıklıyor - Yomal Amarathunge
Mükemmel cevap, teşekkür! Herhangi bir öneriyi kullanarak herhangi bir performans cezası biliyor musunuz? - lmedinas


Kullanıcı bu düğmeyi tıkladığında, doğrudan XML'in içinde:

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

Özniteliği kullanma android:onClick Ebeveyn etkinliğinde bulunması gereken yöntem ismini bildiririz. Bu yüzden bu yöntemi faaliyetlerimizde böyle yapmak zorundayım:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}

33
2017-07-29 12:41



Güzel ve basit, teşekkürler. - CHarris


Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);

17
2018-02-11 10:28



Bu sadece kısmi bir cevaptır. dahası, bu yeterli değildir, yani projede ek değişiklikler yapılmadan çalışmayacaktır. - andr


    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.

8
2017-12-03 11:58





Emmanuel

Etkinliğe başlamadan önce fazladan bilgi koyulması gerektiğini düşünüyorum. Aksi takdirde, on-create yöntemiyle NextActivity yöntemine erişiyorsanız, veriler kullanılamayacaktır.

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);

7
2018-04-16 23:53





Gönderen Etkinliğinden aşağıdaki kodu deneyin.

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

            }

Alıcı Etkinliğinden aşağıdaki kodu deneyin:

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

Ardından AndroidManifest.xml dosyasına aşağıdaki kodu ekleyin

  android:name="packagename.NameOfTheReceivingActivity"
  android:label="Title of the Activity"
  android:parentActivityName="packagename.NameOfSendingActivity"

6
2018-01-29 13:27





Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);

5
2018-05-24 07:03





Yeni aktiviteler başlatma yolu bir niyet yayınlamaktır ve verileri bir etkinlikten diğerine geçirmek için kullanabileceğiniz belirli bir amaç vardır. Benim önerim, Android geliştirici dokümanlar için Intents'in; Konu hakkında bilgi zenginliği ve örnekleri de var.


3
2017-11-15 15:48





Bu kodu deneyebilirsiniz:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);

3
2017-12-26 11:32