Как начать новую деятельность по нажатию кнопки

Ответы:

1117

Легко.

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
Где находится часть нажатия кнопки? (нажатие кнопки → переход к следующему занятию)
Джонни
4
@Jonny: вот пример нажатия кнопки. stackoverflow.com/a/7722428/442512
Эммануэль
8
Есть ли разница между CurrentActivity.this.startActivity(myIntent)и startActivity(myIntent)?
путать
5
Да, легко, лол. Существует больше кода, чем фактически введенный код. Где отсутствует весь интерфейс xml и код .java? Downvote
Liquid Core
111
Liquid, ты бы хотел, чтобы он тоже запаковал его в 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");
}

Теперь, если вам нужно обмениваться данными между двумя действиями, вы также можете иметь Global Singleton.

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 .

  1. Использование onClickатрибута кнопки. (Начальный)
  2. Назначение OnClickListener()через анонимный класс. (Средний)
  3. Метод с широким интерфейсом действий с использованием switchоператора. (Pro)

Вот ссылка на мой пример, если вы хотите следовать:

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оператора. (Pro)

Это когда вы используете 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 метод является кошмаром и не является профессиональным. метод с zilion строками кода не делает вас профессионалом. ПОЦЕЛУЙ .
Мехди
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);
}
IntelliJ Amiya
источник
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.
user1923551
источник
8

Эммануэль,

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

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

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);
user1337489
источник
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"
Алекс Ирабор
источник
7
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
Махтаб
источник
7

Попробуйте этот простой метод.

startActivity(new Intent(MainActivity.this, SecondActivity.class));
Джозеф Сарз
источник
5

Вы можете попробовать этот код:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
Prinkal
источник
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"))
Khemraj
источник
4

Запуск действия из другого действия - очень распространенный сценарий среди приложений для Android.
Чтобы начать занятие, вам нужен объект Intent .

Как создать Объекты Намерения?

Объект намерения принимает два параметра в своем конструкторе

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

Пример:

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

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

Вот фрагмент кода, который показывает, как запустить DetailActivity из

HomeActivity.

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 Object.

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

Получить данные в другой деятельности (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");
DroidNinja
источник
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;
            }
user1918566
источник
2

Хотя правильные ответы уже были предоставлены, но я здесь для поиска ответа на языке Kotlin. Этот вопрос не относится к конкретному языку, поэтому я добавляю код для выполнения этой задачи на языке Kotlin.

Вот как вы делаете это в Kotlin для 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>
sn n
источник
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();
            }
         });

В secondActivity.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"
/>

После этого инициализируйте и обработайте щелчок слушателя в Activity, как показано ниже.

В методе 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
источник