Як почати нову діяльність при натисканні кнопки


Відповіді:


1115

Легко.

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

Додаткові дані отримуються з іншого боку за допомогою:

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

Не забудьте додати свою нову діяльність у AndroidManifest.xml:

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

18
Де частина натискання кнопки? (натискання кнопки → перехід до наступної активності)
Jonny

4
@Jonny: Ось приклад натискання кнопки. stackoverflow.com/a/7722428/442512
Еммануель

8
Чи є різниця між CurrentActivity.this.startActivity(myIntent)і startActivity(myIntent)?
Переплутати

5
Так, легко, хаха. Існує більше кодемізації, ніж насправді набраний код. Де відсутні всі інтерфейси xml та .java-код? Downvote
рідке ядро

111
Рідкий, ти хотів би, щоб він також упакував його в apk? ;)
Кейсі Мюррей

60

Створіть намір до діяльності ViewPerson та передайте PersonID (наприклад, для пошуку бази даних).

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

Потім у ViewPerson Activity ви можете отримати пакет додаткових даних, переконайтеся, що він не є нульовим (у випадку, якщо ви іноді не передаєте дані), а потім отримайте дані.

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

Тепер, якщо вам потрібно обмінюватися даними між двома видами діяльності, ви також можете мати глобальний синглтон.

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

Потім зателефонуйте в будь-яку діяльність:

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

Поточні відповіді чудові, але для початківців потрібна більш вичерпна відповідь. Існує 3 різних способи розпочати нову діяльність в Android, і всі вони використовують Intentклас; Намір | Android Developers .

  1. Використання onClickатрибута кнопки. (Новачок)
  2. Призначення OnClickListener()анонімного класу. (Проміжний)
  3. Метод широкого інтерфейсу діяльності за допомогою switchоператора. (Про)

Ось посилання на мій приклад, якщо ви хочете слідувати далі:

1. Використання onClickатрибута кнопки. (Новачок)

Кнопки мають onClickатрибут, який знаходиться у файлі .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" />

У класі 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);
}

Перевага : Легко виготовити на льоту, модульно, і можна легко встановити декілька onClicks на один і той же намір.

Недолік : Важка читабельність при перегляді.

2. Присвоєння OnClickListener()анонімного класу. (Проміжний)

Це коли ви встановлюєте окремий setOnClickListener()для кожного buttonі переосмислюєте кожного onClick()з його власним наміром.

У класі 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);}
            });

Перевага : Легко виготовити на льоту.

Недолік : Існує багато анонімних класів, які ускладнюють читабельність при перегляді.

3. Метод широкого інтерфейсу діяльності за допомогою switchоператора. (Про)

Це коли ви використовуєте switchоператор для своїх кнопок у межах onClick()методу для управління всіма кнопками діяльності.

У класі 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;
    }

Перевага : просте управління кнопками, оскільки всі наміри кнопки реєструються в одному onClick()методі


У другій частині запитання, передаючи дані, див. Як я можу передавати дані між видами діяльності в додатку Android?


Відмінна відповідь, дякую! чи знаєте ви про будь-який штрафний показник, використовуючи будь-яку пропозицію?
lmedinas

3
№3 не є "профі". Це найменш читабельний і доступний варіант, і він буде перетворений на номер 1 або №2 першим досвідченим розробником, який бачить це. (Або вони будуть використовувати Butterknife, що є варіантом №1 для стероїдів.)
Кевін Крумвіде,

Я думаю, що програмістам взагалі не подобається №3. поклавши, Idk, 10 кнопок обробника клацань всередині 1 методу - це кошмар і зовсім не є професійним. метод з циліонними рядками коду не робить вас професійним. KISS .
Мехді Дехгані

3 точно не "про"
Кайзер

36

Коли користувач натискає кнопку, безпосередньо всередині XML:

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

Використовуючи атрибут, android:onClickми оголошуємо ім'я методу, який повинен бути присутнім у батьківській діяльності. Тому я повинен створити цей метод всередині нашої діяльності так:

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
це лише часткова відповідь. до того ж це недостатньо, тобто не працюватиме без додаткових модифікацій у проекті.
andr

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

    This is an explicit intent to start secondscreen activity.

8

Еммануїл,

Я думаю, що додаткову інформацію потрібно поставити перед початком діяльності, інакше дані ще не будуть доступні, якщо ви отримуєте доступ до неї в методі onCreate NextActivity.

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);

7

Спробуйте активувати наступний код

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

            }

Спробуйте отримати наступний код:

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

Потім просто додайте наступний код у файл AndroidManifest.xml

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



5

Ви можете спробувати цей код:

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

4

Спосіб початку нових заходів - це трансляція намірів, і існує певний вид намірів, який ви можете використовувати для передачі даних від однієї діяльності до іншої. Моя рекомендація полягає в тому, щоб перевірити документи розробника Android, пов’язані з намірами ; це велика кількість інформації про цю тему, і вона має приклади.


4

Котлін

Перша діяльність

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

Друга діяльність

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

Пропозиція

Завжди кладіть ключі в постійний файл для більш керованого способу.

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

4

Почати діяльність з іншої діяльності - дуже поширений сценарій серед додатків для Android.
Щоб розпочати діяльність, вам потрібен об'єкт Intent .

Як створити об'єкти наміру?

Об'єкт наміру приймає у своєму конструкторі два параметри

  1. Контекст
  2. Назва діяльності, яку слід розпочати. (або повну назву пакета)

Приклад:

введіть тут опис зображення

Так, наприклад, якщо у вас є два види діяльності, скажімо , HomeActivityі , DetailActivityі ви хочете , щоб почати DetailActivityз HomeActivity (HomeActivity -> DetailActivity).

Ось фрагмент коду, який показує, як запустити DetailActivity з

Домашня активність.

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

І ви закінчили.

Повертаючись до кнопки, натисніть на частину.

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

Почніть іншу діяльність з цієї діяльності, і ви також можете передавати параметри і через об'єкт Bundle.

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

Отримати дані в іншій діяльності (YourActivity)

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

2

Реалізуйте інтерфейс View.OnClickListener та замініть метод 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;
            }

2

Хоча відповіді вже надано, але я тут шукаю відповідь мовою Котлін. Це питання не стосується мови, тому я додаю код для виконання цього завдання мовою Котліна.

Ось як ви це робите в Котліні для andorid

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

 }

2

Найпростіший спосіб відкрити діяльність при натисканні кнопки:

  1. Створіть дві дії в папці res, додайте кнопку до першої діяльності та дайте ім'я для onclickфункціонування.
  2. Для кожної діяльності має бути два файли Java.
  3. Нижче наведено код:

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 (Просто додайте цей блок коду до існуючого)

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

1

Спершу візьміть кнопку в 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"
        />

Зробіть списокник кнопки.

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

1

При натисканні кнопки:

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

Щоб отримати додаткові дані від NextActivity.class:

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

1

Напишіть код у своїй першій діяльності.

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

У другомуActivity.class

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

1

Розмістіть віджет кнопки в xml, як показано нижче

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

Після цього ініціалізуйте та обробляйте слухача кліків у такій діяльності, як нижче ..

У способі "Активність у створенні":

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);
    }
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.