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种不同的启动新活动的方法,它们都使用
下面是我的例子的链接,如果您想遵循:https://github.com/martinsing/tonewatitybuttons
1。使用按钮的按钮具有在.xml文件中找到的
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); } |
优点:易于制作,模块化,可以方便地将多个
缺点:阅读困难。
2。通过匿名类分配这是当您为每个
在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);} }); |
优点:容易在飞行中制造。
缺点:会有很多匿名类,这会使阅读困难。
三.使用这是当您在
在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; } |
优点:易于按钮管理,因为所有按钮意图都是在一个单一的
对于问题的第二部分,传递数据,请参见如何在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"/> |
使用属性
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:
例如,如果您有两个活动,例如
下面是代码片段,演示如何从
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) } |
点击按钮打开活动的最简单方法是:
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); } }); |
从
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); } }); |