关于android:如何在按钮点击时启动新活动

How to start new activity on button click

在Android应用程序中,当单击另一个活动中的按钮时,如何启动新活动(GUI),以及如何在这两个活动之间传递数据?


容易的。

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

在另一侧通过以下方式检索附加项:

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

不要忘记在androidmanifest.xml中添加新活动:

1
 


创建对viewPerson活动的意图并传递personid(例如,用于数据库查找)。

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

然后在viewperson活动中,您可以获取额外数据包,确保它不是空的(如果有时不传递数据),然后获取数据。

1
2
3
4
5
Bundle extras = getIntent().getExtras();
if(extras !=null)
{
     personID = extras.getString("PersonID");
}

现在,如果您需要在两个活动之间共享数据,您还可以拥有一个全局单例。

1
2
3
4
public class YourApplication extends Application
{    
     public SomeDataClass data = new SomeDataClass();
}

然后在任何活动中通过以下方式调用它:

1
2
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

目前的回答很好,但初学者需要更全面的答案。在Android中有3种不同的启动新活动的方法,它们都使用Intent类;意图Android开发人员。

  • 使用按钮的onClick属性。(初学者)
  • 通过匿名类分配OnClickListener()。(中级)
  • 使用switch语句的活动范围接口方法。(临)
  • 下面是我的例子的链接,如果您想遵循:https://github.com/martinsing/tonewatitybuttons

    1。使用按钮的onClick属性。(初学者)

    按钮具有在.xml文件中找到的onClick属性:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <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类中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @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);
    }

    优点:易于制作,模块化,可以方便地将多个onClick设置为相同的目的。

    缺点:阅读困难。

    2。通过匿名类分配OnClickListener()。(中级)

    这是当您为每个button设置一个单独的setOnClickListener(),并以自己的意图覆盖每个onClick()

    在Java类中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_activity);

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

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

    优点:容易在飞行中制造。

    缺点:会有很多匿名类,这会使阅读困难。

    三.使用switch语句的活动范围接口方法。(临)

    这是当您在onClick()方法中对按钮使用switch语句来管理所有活动的按钮时。

    在Java类中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        button1 = (Button) findViewById(R.id.button1);
        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应用程序中的活动之间传递数据?


    当用户单击按钮时,直接在XML内部,如下所示:

    1
    2
    3
    4
    5
    6
    <Button
             android:id="@+id/button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="TextButton"
             android:onClick="buttonClickFunction"/>

    使用属性android:onClick声明必须出现在父活动上的方法名。所以我必须在我们的活动中创建这样的方法:

    1
    2
    3
    4
    5
    public void buttonClickFunction(View v)
    {
                Intent intent = new Intent(getApplicationContext(), Your_Next_Activity.class);
                startActivity(intent);
    }


    1
    2
    Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
    startActivity(iinent);


    1
    2
    3
    4
        Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);    
        startActivity(in);

        This is an explicit intent to start secondscreen activity.

    艾曼纽

    我认为应该在开始活动之前输入额外的信息,否则如果您使用nextactivity的onCreate方法访问数据,数据将不可用。

    1
    2
    3
    4
    5
    Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

    myIntent.putExtra("key", value);

    CurrentActivity.this.startActivity(myIntent);

    从发送活动尝试以下代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
       //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);

                }

    从接收活动尝试以下代码:

    1
    2
    3
    4
    5
    6
       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文件中

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

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


    您可以尝试以下代码:

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

    试试这个简单的方法。

    1
    startActivity(new Intent(MainActivity.this, SecondActivity.class));

    从另一个活动启动活动是Android应用程序中非常常见的场景。要开始一个活动,你需要一个意图对象。

    如何创建意向对象?

    意向对象在其构造函数中接受两个参数

  • 语境
  • 要启动的活动的名称。(或完整包名称)
  • Example:

    enter image description here

    例如,如果您有两个活动,例如HomeActivityDetailActivity,您希望从HomeActivity启动DetailActivity(homeActivity->detailactivity)。

    下面是代码片段,演示如何从

    HomeActivity.

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

    你就完了。

    Coming back to button click part.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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);  
          }

    });

    开始新活动的方法是广播一个意图,并且有一种特定的意图可以用来将数据从一个活动传递到另一个活动。我的建议是,您可以查看与意图相关的Android开发人员文档;这是一个关于这个主题的丰富信息,也有一些示例。


    从该活动启动另一个活动,您还可以通过bundle对象传递参数。

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

    在另一个活动中检索数据(实际值)

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


    科特林

    第一活动

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

    第二活动

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

    建议

    始终将密钥放在常量文件中以获得更有效的管理方式。

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

    实现view.onclickListener接口并重写onclick方法。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    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;
                }

    虽然已经提供了正确的答案,但我是来这里寻找语言科特林的答案的。这个问题与语言无关,所以我要添加代码来用Kotlin语言完成这个任务。

    这是你在科特林为安道尔做的事

    1
    2
    3
    4
    5
    testActivityBtn1.setOnClickListener{
          val intent = Intent(applicationContext,MainActivity::class.java)
          startActivity(intent)

     }

    点击按钮打开活动的最简单方法是:

  • 在res文件夹下创建两个活动,在第一个活动中添加一个按钮,并为onclick函数命名。
  • 每个活动应该有两个Java文件。
  • 代码如下:
  • mainactivity.java(主活动.java)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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);
        }
    }

    第二活动.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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(只需将此代码块添加到现有代码中)

    1
    2
    3
     </activity>
           
      </activity>

    首先使用XML中的按钮。

    1
    2
    3
    4
    5
    6
    7
      <Button
            android:id="@+id/pre"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@mipmap/ic_launcher"
            android:text="Your Text"
            />

    制作Button的Listner。

    1
    2
    3
    4
    5
    6
    7
     pre.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });


    单击按钮时:

    1
    2
    3
    4
    5
    6
    7
    8
    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接收额外数据:

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

    在第一个活动中编写代码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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中

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

    将按钮小部件放入XML中,如下所示

    1
    2
    3
    4
    5
    6
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
    />

    之后,在下面的活动中初始化并处理单击侦听器。

    在创建方法的活动中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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);
        }
    });