Jak rozpocząć nową aktywność po kliknięciu przycisku

Odpowiedzi:

1115

Łatwy.

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

Dodatki są pobierane po drugiej stronie poprzez:

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

Nie zapomnij dodać nowej aktywności do pliku AndroidManifest.xml:

<activity android:label="@string/app_name" android:name="NextActivity"/>
Emmanuel
źródło
18
Gdzie jest część z przyciskiem? (kliknięcie przycisku → przejście do następnej aktywności)
Jonny
4
@Jonny: Oto przykład kliknięcia przycisku. stackoverflow.com/a/7722428/442512
Emmanuel
8
Czy jest jakaś różnica między CurrentActivity.this.startActivity(myIntent)i startActivity(myIntent)?
Confuse
5
Tak, łatwy lol. Jest więcej kodemissowania niż faktycznie wpisanego kodu. Gdzie brakuje całego interfejsu XML i kodu .java? Downvote
Liquid Core
111
Ciecz, czy też chciałbyś, żeby spakował go do apka? ;)
Casey Murray
60

Utwórz zamiar działania ViewPerson i przekaż PersonID (na przykład wyszukiwanie w bazie danych).

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

Następnie w ViewPerson Activity możesz uzyskać pakiet dodatkowych danych, upewnić się, że nie jest on zerowy (w przypadku, gdy czasami nie przekazujesz danych), a następnie pobierz dane.

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

Teraz, jeśli chcesz współdzielić dane między dwoma Działaniami, możesz także mieć Global Singleton.

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

Następnie nazwij to w dowolnej czynności, wykonując:

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
źródło
58

Aktualne odpowiedzi są świetne, ale dla początkujących potrzebna jest bardziej kompleksowa odpowiedź. Istnieją 3 różne sposoby rozpoczęcia nowej działalności w systemie Android i wszystkie one wykorzystują Intentklasę; Zamierzenie | Programiści Androida .

  1. Korzystanie z onClickatrybutu przycisku. (Początkujący)
  2. Przypisywanie OnClickListener()anonimowej klasy. (Pośredni)
  3. Metoda interfejsu szerokiego na działanie przy użyciu switchinstrukcji. (Zawodowiec)

Oto link do mojego przykładu, jeśli chcesz śledzić:

1. Używając onClickatrybutu przycisku. (Początkujący)

Przyciski mają onClickatrybut znaleziony w pliku .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" />

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

Zaleta : łatwa do wykonania w locie, modułowa i może z łatwością ustawić wiele onClicks na ten sam cel.

Wada : trudna czytelność podczas recenzowania.

2. Przypisywanie OnClickListener()anonimowej klasy. (Pośredni)

Dzieje się tak, gdy ustawiasz osobne setOnClickListener()dla każdego z nich buttoni zastępujesz onClick()je według własnych zamiarów.

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

Zaleta : łatwa do wykonania w locie.

Wada : Będzie wiele anonimowych klas, które utrudnią czytelność podczas recenzji.

3. Metoda interfejsu z szerokim zakresem aktywności za pomocą switchinstrukcji. (Zawodowiec)

Dzieje się tak, gdy używasz switchinstrukcji dla przycisków w ramach onClick()metody do zarządzania wszystkimi przyciskami działania.

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

Zaleta : Łatwe zarządzanie przyciskami, ponieważ wszystkie zamiary przycisków są rejestrowane za pomocą jednej onClick()metody


W drugiej części pytania, przekazywanie danych, zobacz Jak przesyłać dane między działaniami w aplikacji na Androida?

Martin Sing
źródło
Doskonała odpowiedź, dziękuję! czy wiesz o jakimkolwiek obniżeniu wydajności przy użyciu którejkolwiek z sugestii?
lmedinas
3
# 3 nie jest „pro”. Jest to najmniej czytelna i łatwa w utrzymaniu opcja, która zostanie przekształcona w numer 1 lub 2 przez pierwszego doświadczonego programistę, który ją zobaczy. (Albo użyją Butterknife, który jest opcją nr 1 na sterydach).
Kevin Krumwiede,
Myślę, że pro programiści wcale nie lubią # 3. wprowadzenie, idk, 10 przycisków obsługi kliknięć w ramach 1 metody jest koszmarem i wcale nie jest profesjonalne. metoda z liniami kodu zilion nie czyni cię profesjonalistą. KISS .
Mehdi Dehghani,
3 zdecydowanie nie jest „pro”
Kaiser Keister
36

Gdy użytkownik kliknie przycisk, bezpośrednio w pliku XML w następujący sposób:

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

Za pomocą atrybutu android:onClickdeklarujemy nazwę metody, która musi być obecna w działaniu nadrzędnym. Więc muszę stworzyć tę metodę w naszej działalności w ten sposób:

public void buttonClickFunction(View v)
{
            Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
            startActivity(intent);
}
IntelliJ Amiya
źródło
19
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
Vishal Rangani
źródło
2
to tylko częściowa odpowiedź. ponadto nie jest wystarczające, tzn. nie będzie działać bez dodatkowych modyfikacji w projekcie.
andr
10
    Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
    startActivity(in);

    This is an explicit intent to start secondscreen activity.
użytkownik1923551
źródło
8

Emmanuel,

Myślę, że dodatkowe informacje należy podać przed rozpoczęciem działania, w przeciwnym razie dane nie będą jeszcze dostępne, jeśli uzyskujesz do nich dostęp za pomocą metody onCreate NextActivity.

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);
użytkownik1337489
źródło
7

Z działania wysyłania wypróbuj następujący kod

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

            }

Z działania odbierającego wypróbuj następujący kod:

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

Następnie wystarczy dodać następujący kod do pliku AndroidManifest.xml

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

Wypróbuj tę prostą metodę.

startActivity(new Intent(MainActivity.this, SecondActivity.class));
Joseph Sarz
źródło
5

Możesz wypróbować ten kod:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
Prinkal
źródło
4

Sposobem na rozpoczęcie nowych działań jest transmisja zamiaru, a istnieje szczególny rodzaj zamiaru, którego można użyć do przekazania danych z jednego działania do drugiego. Moja rekomendacja to przejrzenie dokumentów programistów Androida związanych z zamiarami ; zawiera wiele informacji na ten temat i zawiera również przykłady.

Brian Driscoll
źródło
4

Kotlin

Pierwsza aktywność

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

Druga aktywność

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

Sugestia

Zawsze przechowuj klucze w stałym pliku, aby lepiej zarządzać.

companion object {
    val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
  .putExtra(PUT_EXTRA_USER, "value"))
Khemraj
źródło
4

Rozpoczęcie aktywności od innej aktywności jest bardzo częstym scenariuszem wśród aplikacji na Androida.
Aby rozpocząć aktywność, potrzebujesz zamiaru obiektu .

Jak tworzyć obiekty intencyjne?

Obiekt docelowy przyjmuje dwa parametry w swoim konstruktorze

  1. Kontekst
  2. Nazwa działania, które ma zostać uruchomione. (lub pełna nazwa pakietu)

Przykład:

wprowadź opis zdjęcia tutaj

Na przykład, jeśli masz dwie czynności, powiedz HomeActivityi DetailActivitychcesz rozpocząć DetailActivityod HomeActivity (HomeActivity -> DetailActivity).

Oto fragment kodu, który pokazuje, jak uruchomić DetailActivity

HomeActivity.

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

I gotowe.

Wracając do przycisku kliknij część.

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
źródło
3

Rozpocznij inną aktywność od tej aktywności i możesz przekazać parametry również przez Obiekt pakietu.

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

Odzyskaj dane w innym działaniu (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");
DroidNinja
źródło
2

Zaimplementuj interfejs View.OnClickListener i zastąp metodę 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;
            }
użytkownik1918566
źródło
2

Chociaż udzielono już prawidłowych odpowiedzi, ale jestem tutaj, aby znaleźć odpowiedź w języku Kotlin. To pytanie nie dotyczy konkretnego języka, dlatego dodam kod, aby wykonać to zadanie w języku Kotlin.

Oto jak to robisz w Kotlin dla Andorida

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

 }
Abdul Rehman
źródło
2

Najprostszym sposobem na otwarcie aktywności po kliknięciu przycisku jest:

  1. Utwórz dwa działania w folderze res, dodaj przycisk do pierwszego działania i nadaj nazwę onclickfunkcji.
  2. Dla każdego działania powinny być dwa pliki Java.
  3. Poniżej znajduje się kod:

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 (wystarczy dodać ten blok kodu do istniejącego)

 </activity>
        <activity android:name=".SecondActivity">
  </activity>
sn n
źródło
1

Najpierw weź Button w XML.

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

Stwórz listę przycisku.

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

Po kliknięciu przycisku:

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

Aby otrzymać dodatkowe dane od NextActivity.class:

Bundle extra = getIntent().getExtras();
if (extra != null){
    String str = (String) extra.get("data"); // get a object
}
Hasib Akter
źródło
1

Napisz kod w pierwszej aktywności.

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

W secondActivity.class

String name = getIntent().getStringExtra("Key");
Gyan Swaroop Awasthi
źródło
1

Umieść widget przycisku w XML tak jak poniżej

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

Po tej inicjalizacji i obsłudze nasłuchiwania kliknięć w działaniu jak poniżej ...

W metodzie 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
źródło