如何在单击按钮时启动新活动


Answers:


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 2012年

4
@Jonny:这是一个按钮单击的示例。stackoverflow.com/a/7722428/442512
伊曼纽尔(Emmanuel)

8
有什么区别CurrentActivity.this.startActivity(myIntent)startActivity(myIntent)
混淆

5
是的,很容易。丢失的代码多于实际键入的代码。哪里缺少所有xml接口和.java代码?Downvote
Liquid Core

111
Liquid,您是否也希望他将其打包成apk?;)
Casey Murray

60

为ViewPerson活动创建一个意图,并传递PersonID(例如,用于数据库查找)。

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

然后,在ViewPerson Activity中,您可以获取额外的数据包,确保它不为null(以防您有时不传递数据),然后获取数据。

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开发人员

  1. 使用onClickButton 的属性。(初学者)
  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()为每个设置单独的名称buttononClick()使用其自己的意图覆盖每个名称时。

在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声明。(专业版)

这是当您switchonClick()方法中的按钮使用语句来管理所有“活动”按钮时。

在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。)
Kevin Krumwiede

我认为专业程序员根本不喜欢#3。将Idk,10个按钮单击处理程序放在一种方法中是一场噩梦,而且一点也不专业。zilion代码行的方法不会使您变得专业。KISS
Mehdi Dehghani

3绝对不是“亲”
Kaiser Keister

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

伊曼纽尔

我认为应该在开始活动之前放置额外的信息,否则,如果您正在NextActivity的onCreate方法中访问数据,则该数据尚不可用。

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"

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


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. 要启动的活动的名称。(或完整的包裹名称)

例:

在此处输入图片说明

因此,例如,如果您有两个活动,请说HomeActivityDetailActivity,然后DetailActivityHomeActivity (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 Object传递参数。

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

尽管已经提供了正确的答案,但是我在这里用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>

1

首先在xml中获取Button。

  <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 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);
    }
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.