Jak rozpocząć nową aktywność na przycisku kliknij
W aplikacji na Androida, jak uruchomić nową aktywność (GUI), gdy przycisk w innej aktywności jest kliknięty, i jak przekazać dane między tymi dwoma działaniami?
25 answers
Spokojnie.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);
Dodatki są pobierane z drugiej strony przez:
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
String value = intent.getStringExtra("key"); //if it's a string you stored.
}
Nie zapomnij dodać nową aktywność w AndroidManifest.xml:
<activity android:label="@string/app_name" android:name="NextActivity"/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-18 17:34:33
Obecne odpowiedzi są świetne, ale bardziej wyczerpująca odpowiedź jest potrzebna dla początkujących. Istnieją 3 różne sposoby rozpoczęcia nowej aktywności w systemie Android, a wszystkie używają klasy Intent
; Intent / Android Developers.
- używając atrybutu
onClick
przycisku. (Początkujący) - Przypisywanie
OnClickListener()
przez anonimową klasę. (Intermediate) - Activity wide interface method using the
switch
statement. (Pro)
Oto link do mojego przykładu, jeśli chcesz iść dalej:
1. Używając atrybutu onClick
przycisku. (Początkujący)
Przyciski mają atrybut onClick
, który znajduje się wplik 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);
}
Advantage : łatwy do wykonania w locie, modułowy i może łatwo ustawić wiele onClick
s W tym samym celu.
Wada : trudna czytelność podczas przeglądania.
2. Przypisywanie OnClickListener()
przez anonimową klasę. (Intermediate)
Jest to, gdy ustawiasz oddzielny setOnClickListener()
do każdego button
i nadpisujesz każdy onClick()
z własną intencją.
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 : łatwe do wykonania w locie.
Wada: będzie wiele anonimowych klas, które utrudnią czytelność podczas przeglądania.
3. Activity wide interface method using the switch
statement. (Pro)
To jest kiedy używasz switch
Oświadczenia dla Twoich przycisków w metodzie onClick()
do zarządzania wszystkimi przyciskami aktywności.
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 przyciski są rejestrowane w jednej metodzie onClick()
Druga część pytania, przekazywanie danych, znajduje się w jak przekazać dane między aktywnościami w aplikacji na Androida?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-30 20:43:02
Utwórz intencję do aktywności ViewPerson i podaj identyfikator PersonID(na przykład dla Wyszukiwania bazy danych).
Intent i = new Intent(getBaseContext(), ViewPerson.class);
i.putExtra("PersonID", personID);
startActivity(i);
Następnie w aktywności ViewPerson możesz uzyskać pakiet dodatkowych danych, upewnić się, że nie jest null( w przypadku, gdy czasami nie przekazujesz danych), a następnie uzyskać dane.
Bundle extras = getIntent().getExtras();
if(extras !=null)
{
personID = extras.getString("PersonID");
}
Teraz, jeśli chcesz udostępnić dane między dwoma działaniami, możesz również mieć globalny Singleton.
public class YourApplication extends Application
{
public SomeDataClass data = new SomeDataClass();
}
Następnie wywołaj go w dowolnej aktywności przez:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-15 16:07:57
Gdy użytkownik kliknie przycisk, bezpośrednio wewnątrz XML w ten sposób:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextButton"
android:onClick="buttonClickFunction"/>
Używanie atrybutu android:onClick
deklarujemy nazwę metody, która ma być obecna w aktywności rodzica. Więc muszę stworzyć tę metodę wewnątrz naszej aktywności w ten sposób:
public void buttonClickFunction(View v)
{
Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
startActivity(intent);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-03 06:52:32
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-11 10:48:52
Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);
startActivity(in);
This is an explicit intent to start secondscreen activity.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-03 11:58:34
Emmanuel,
Myślę, że dodatkowe informacje powinny być umieszczone przed rozpoczęciem aktywności, w przeciwnym razie dane nie będą jeszcze dostępne, jeśli uzyskujesz do nich dostęp w onCreate method of NextActivity.
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value);
CurrentActivity.this.startActivity(myIntent);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-16 23:53:39
Z aktywności wysyłania spróbuj użyć następującego kodu
//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 otrzymującego spróbuj użyć następującego kodu:
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 AndroidManifest.plik xml
android:name="packagename.NameOfTheReceivingActivity"
android:label="Title of the Activity"
android:parentActivityName="packagename.NameOfSendingActivity"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-29 13:27:03
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 14:15:23
Spróbuj tej prostej metody.
startActivity(new Intent(MainActivity.this, SecondActivity.class));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 20:53:42
Możesz wypróbować ten kod:
Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-26 11:44:10
Sposobem na rozpoczęcie nowych działań jest nadawanie intencji, a istnieje określony rodzaj intencji, który można wykorzystać do przekazywania danych z jednej aktywności do drugiej. Polecam zapoznanie się z dokumentami programistycznymi Androida związanymi z intentami; jest to bogactwo informacji na ten temat i ma również przykłady.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-15 15:48:39
Kotlin
Pierwsza Aktywność
startActivity(Intent(this, SecondActivity::class.java)
.putExtra("key", "value"))
Druga Aktywność
val value = getIntent().getStringExtra("key")
Sugestia
Zawsze umieszczaj klucze w stałym pliku, aby uzyskać bardziej zarządzany sposób.
companion object {
val PUT_EXTRA_USER = "user"
}
startActivity(Intent(this, SecondActivity::class.java)
.putExtra(PUT_EXTRA_USER, "value"))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Uruchamianie aktywności z innej aktywności jest bardzo powszechnym scenariuszem wśród aplikacji na Androida.
Aby rozpocząć działanie, potrzebujesz obiektu Intent .
Jak tworzyć obiekty intencyjne?
Obiekt intencyjny pobiera dwa parametr w swoim konstruktorze
- kontekst
- Nazwa czynności do rozpoczęcia. (lub pełna nazwa pakietu)
Przykład:
Więc dla przykład, jeśli masz dwie czynności, powiedzmy HomeActivity
i DetailActivity
i chcesz zacząć DetailActivity
od HomeActivity
(Strona główna -- > DetailActivity).
Oto fragment kodu, który pokazuje, jak rozpocząć DetailActivity od
Aktywność domowa.
Intent i = new Intent(HomeActivity.this,DetailActivity.class);
startActivity(i);
I jesteś skończony.
Powrót do części przycisk kliknij.
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);
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Uruchom inną aktywność z tej aktywności i możesz również przekazać parametry za pomocą obiektu Bundle.
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);
Pobieranie danych w innej aktywności (Twoja aktywność)
String s = getIntent().getStringExtra("USER_NAME");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-23 12:02:45
// W , możesz zrobić jak / * W pierwszej aktywności, w układzie aktywności jest przycisk, który ma id jako przycisk. Załóżmy, że muszę przekazać dane jako typ String z jednej czynności do drugiej * /
val btn = findViewById<Button>(R.id.button)
btn.setOnClickListener {
val intent = Intent(baseContext, SecondActivity::class.java).apply {
putExtra("KEY", data)
}
startActivity(intent)
}
/ / w drugiej aktywności możesz pobrać dane z innej aktywności jako
val name = intent.getStringExtra("KEY")
/* przypuśćmy, że musisz przekazać obiekt Niestandardowy, wtedy powinien on być Parcelowalny. niech jest typ kolażu klasy, który muszę przejść z jednego działania do drugiego */
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
class Collage(val name: String, val mobile: String, val email: String) : Parcelable
/* Aktywność Pierwsza , niech tutaj dane są typu kolaż. które muszę przekazać do innej działalności. */
val btn = findViewById<Button>(R.id.button)
btn.setOnClickListener {
val intent = Intent(baseContext, SecondActivity::class.java).apply {
putExtra("KEY", data)
}
startActivity(intent)
}
/ / wtedy z drugiej aktywności otrzymamy jako
val item = intent.extras?.getParcelable<Collage>("KEY")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-05 03:23:22
Zaimplementuj Widok.Interfejs OnClickListener i nadpisanie metody 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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-15 14:38:23
Chociaż poprawne odpowiedzi zostały już dostarczone, ale jestem tutaj, aby szukać odpowiedzi w języku Kotlin. To pytanie nie dotyczy specyfiki języka, więc dodaję kod do wykonania tego zadania w języku Kotlin.
Oto Jak to zrobić w Kotlinie dla Andorida
testActivityBtn1.setOnClickListener{
val intent = Intent(applicationContext,MainActivity::class.java)
startActivity(intent)
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-14 10:32:45
Najprostszym sposobem otwarcia aktywności po kliknięciu przycisku jest:
- utwórz dwie czynności w folderze res, Dodaj przycisk do pierwszej czynności i nadaj nazwę funkcji
onclick
. - dla każdej aktywności powinny być dwa pliki Javy.
- Poniżej znajduje się kod:
Główna aktywność.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);
}
}
Druga aktywność.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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-04 09:58:25
Weź najpierw przycisk 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"
/>
Utwórz listner przycisku.
pre.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-01 08:30:19
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 z NextActivity.class
:
Bundle extra = getIntent().getExtras();
if (extra != null){
String str = (String) extra.get("data"); // get a object
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-31 18:52:04
Wpisz kod w swojej 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();
}
});
In secondActivity.klasa
String name = getIntent().getStringExtra("Key");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-20 09:37:18
Umieść widżet przycisku w xml jak poniżej
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>
Po tym inicjalizacji i obsługi NA kliknij listener w aktywności jak poniżej ..
W aktywności przy metodzie 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);
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-09 14:20:57
Stare pytanie, ale jeśli celem jest przełączenie wyświetlanych stron, mam tylko jedną czynność i wywołuję setContentView (), gdy chcę przełączać strony (zwykle w odpowiedzi na kliknięcie przez użytkownika przycisku). To pozwala mi po prostu zadzwonić z jednej strony zawartości do drugiej. Brak intencji dodatkowych pakietów paczek i wszelkich prób przekazywania danych tam i z powrotem.
Robię kilka stron w res / layout jak zwykle, ale nie robię aktywności dla każdego. Wystarczy użyć setContentView (), aby je przełączyć w razie potrzeby.
Więc moja Jedynka () ma:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater layoutInflater = getLayoutInflater();
final View mainPage = layoutInflater.inflate(R.layout.activity_main, null);
setContentView (mainPage);
Button openMenuButton = findViewById(R.id.openMenuButton);
final View menuPage = layoutInflatter.inflate(R.layout.menu_page, null);
Button someMenuButton = menuPage.findViewById(R.id.someMenuButton);
openMenuButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setContentView(menuPage);
}
});
someMenuButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
do-something-interesting;
setContentView(mainPage);
}
}
}
Jeśli chcesz, aby przycisk Wstecz przechodził przez wewnętrzne strony przed opuszczeniem aplikacji, po prostu zawiń setContentView (), aby zapisać strony w małym stosie stron i pop te strony w onbackpressed () handler.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-24 20:33:32
Twój przycisk xml:
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="jump to activity b"
/>
Główna aktywność.java:
Button btn=findViewVyId(R.id.btn);
btn.setOnClickListener(btnclick);
btnclick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setClass(Mainactivity.this,b.class);
startActivity(intent);
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-26 03:58:00