Düğmeye tıklandığında yeni etkinlik nasıl başlatılır


Yanıtlar:


1116

Kolay.

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

Ekstralar diğer taraftan şu şekilde alınır:

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

AndroidManifest.xml dosyasına yeni etkinliğinizi eklemeyi unutmayın:

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

18
Düğme tıklama bölümü nerede? (düğme tıklaması → bir sonraki etkinliğe geçiş)
Jonny

4
@Jonny: Düğmeye tıklamanın bir örneği. stackoverflow.com/a/7722428/442512
Emmanuel

8
Arasında herhangi bir fark var mı CurrentActivity.this.startActivity(myIntent)ve startActivity(myIntent)?
2014

5
Evet, kolay lol. Yazılan koddan daha fazla kodlama vardır. Tüm xml arayüzü ve .java kodu nerede eksik? Downvote
Liquid Core

111
Liquid, onu da bir apk olarak paketlemesini ister misiniz? ;)
Casey Murray

60

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

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

Sonra ViewPerson Etkinliği'nde, fazladan veri paketini alabilir, boş olmadığından emin olabilirsiniz (bazen veri geçmezseniz), ardından verileri alabilirsiniz.

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

Şimdi iki Etkinlik arasında veri paylaşmanız gerekiyorsa, bir Global Singleton'a da sahip olabilirsiniz.

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

Sonra herhangi bir etkinlikte şu şekilde arayın:

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

58

Mevcut yanıtlar harika ama yeni başlayanlar için daha kapsamlı bir cevap gerekiyor. Android'de yeni bir etkinlik başlatmanın 3 farklı yolu vardır ve hepsi Intentsınıfı kullanır ; Amaç | Android Geliştiricileri .

  1. onClickDüğme özniteliğini kullanma . (Acemi)
  2. OnClickListener()Anonim bir sınıf aracılığıyla bir atama . (Orta düzey)
  3. Etkinliği geniş arabirim yöntemi kullanarak switchdeyimi. (Pro)

İşte bağlantı birlikte takip etmek istiyorsanız benim örneğe:

1. onClickDüğme özniteliğini kullanma . (Acemi)

Düğmeler onClick, .xml dosyasında bulunan bir özniteliğe sahiptir:

<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ı : Modüler olarak kolayca yapılabilir, birden fazla onClicks'yi aynı amaca kolayca ayarlayabilir .

Dezavantaj : İnceleme sırasında zor okunabilirlik.

2. OnClickListener()Anonim bir sınıf aracılığıyla bir atama . (Orta düzey)

Bu, setOnClickListener()her birine ayrı ayrı ayarladığınız buttonve her birini onClick()kendi niyetiyle geçersiz kıldığınız zamandır.

Java sınıfında:

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

Avantajı : Anında yapmak kolaydır.

Dezavantajı : İncelenirken okunabilirliği zorlaştıracak birçok anonim sınıf olacaktır.

Kullanılarak 3. Aktivite geniş arabirim yöntemi switchdeyimi. (Pro)

Bu, switchiçindeki düğmeleriniz için bir ifade kullandığınızdaonClick() tüm Etkinlik düğmelerini yönetmek yöntem .

Java sınıfında:

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

Avantajı : Tüm düğme hedefleri tek bir onClick()yöntemle kaydedildiği için kolay düğme yönetimi


Sorunun ikinci bölümü olan veri aktarımı için lütfen Android uygulamasındaki Etkinlikler arasında nasıl veri aktarırım? Bölümüne bakın.


Mükemmel cevap, teşekkür ederim! herhangi bir öneriyi kullanarak herhangi bir performans cezası biliyor musunuz?
lmedinas

3
# 3 "profesyonel" değil. En az okunabilir ve bakımı yapılabilen seçenektir ve onu gören ilk deneyimli geliştirici tarafından # 1 veya # 2'ye yeniden düzenlenir. (Ya da steroidlerde 1. seçenek olan
Butterknife kullanacaklar

Profesyonel programcıların # 3'ü hiç sevmediğini düşünüyorum. koyarak, Idk, 1 yöntem içinde 10 düğme tıklayın işleyici bir kabus ve hiç profesyonel değil. zilion kod satırları ile yöntem sizi profesyonel yapmaz. ÖPÜCÜK .
Mehdi Dehghani

3 kesinlikle "profesyonel" değil
Kaiser Keister

36

Kullanıcı düğmeyi tıkladığında, doğrudan XML içinde şöyle:

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

Özniteliği kullanarak android:onClicküst etkinlikte bulunması gereken yöntem adını beyan ederiz. Bu yüzden faaliyetimizde böyle bir yöntem yaratmak zorundayım:

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

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

2
bu sadece kısmi bir cevaptır. ayrıca yeterli değildir, yani projede ek değişiklikler yapılmadan çalışmaz.
andr

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

    This is an explicit intent to start secondscreen activity.

8

Emmanuel

Aktivite başlamadan önce ekstra bilgi koymak gerektiğini düşünüyorum, aksi takdirde NextActivity onCreate yönteminde erişiyorsanız veriler henüz mevcut olmayacaktır.

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);

7

Gönderen Etkinlikten şu 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ı Etkinlikten şu 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"

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

7

Bu basit yöntemi deneyin.

startActivity(new Intent(MainActivity.this, SecondActivity.class));

5

Bu kodu deneyebilirsiniz:

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

4

Yeni etkinliklere başlamanın yolu bir niyet yayınlamaktır ve verileri bir etkinlikten diğerine aktarmak için kullanabileceğiniz belirli bir niyet türü vardır. Tavsiyem , amaçlarla ilgili Android geliştirici belgelerine göz atmanız ; konuyla ilgili bir bilgi hazinesi ve örnekleri de var.


4

Kotlin

İlk Etkinlik

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

İkinci Etkinlik

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

Öneri

Daha yönetilen bir yol için anahtarları her zaman sabit dosyaya koyun.

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

4

Başka bir etkinlikten bir etkinlik başlatmak, android uygulamaları arasında çok yaygın bir senaryodur.
Bir aktiviteyi başlatmak için bir Intent nesnesine ihtiyacınız vardır .

Niyet Nesneleri nasıl oluşturulur?

Bir niyet nesnesi yapıcısında iki parametre alır

  1. bağlam
  2. Başlatılacak etkinliğin adı . (veya tam paket adı)

Misal:

resim açıklamasını buraya girin

Eğer iki aktiviteyi varsa, yani örneğin, demek HomeActivityve DetailActivityve başlatmak istediğiniz DetailActivityden HomeActivity (HomeActivity -> DetailActivity).

DetailActivity'nin nasıl başlatılacağını gösteren kod snippet'i

HomeActivity.

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

Ve işiniz bitti.

Düğmeye tıklamak parçası geri geliyor.

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

});

3

Bu aktiviteden başka bir aktivite başlatın ve parametreleri Bundle Object ile de iletebilirsiniz.

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "xyz@gmail.com");
startActivity(intent);

Başka bir etkinlikteki verileri alma (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");

2

View.OnClickListener arabirimini uygulayın ve onClick yöntemini geçersiz kılın.

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

2

Her ne kadar uygun cevaplar verilmiş olsa da ben Kotlin dilinde cevap aramak için buradayım. Bu soru dile özgü değildir, bu yüzden Kotlin dilinde bu görevi gerçekleştirmek için kod ekliyorum.

Andorid için Kotlin'de bunu nasıl yapacağınız

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

 }

2

Düğme tıklatıldığında etkinliği açmanın en basit yolu:

  1. Res klasörü altında iki etkinlik oluşturun, ilk etkinliğe bir düğme ekleyin ve onclickişlevine bir ad verin .
  2. Her etkinlik için iki java dosyası olmalıdır.
  3. Kod aşağıdadır:

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 (Bu kod bloğunu mevcut olana eklemeniz yeterlidir)

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

1

Önce xml'de Düğme Al.

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

Düğmenin listelemesini yapın.

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

1

Düğme tıklandığında:

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

Fazladan veri almak için NextActivity.class:

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

1

İlk etkinliğinizde kodu yazın.

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

SecondActivity.class içinde

String name = getIntent().getStringExtra("Key");

1

Düğme widget'ını xml içine aşağıdaki gibi yerleştirin

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

Bundan sonra aşağıdaki gibi Etkinlik'te tıklama dinleyicisini başlatın ve işleyin.

Etkinlik Üzerine Oluşturma yönteminde:

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);
    }
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.