简单。
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value); //Optional parameters
CurrentActivity.this.startActivity(myIntent);
通过以下方式可以在另一侧检索Extras:
@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"/>
CurrentActivity.this.startActivity(myIntent)
和startActivity(myIntent)
之间有什么区别吗? - Confuse目前的回答很好,但初学者需要更全面的回答。在Android中有三种不同的方法来启动新活动,它们都使用 Intent
类;Intent | Android Developers。
onClick
属性。(初学者)OnClickListener()
。(中级)switch
语句的Activity范围接口方法。(非“Pro”)如果您想跟着我示例走,这是链接:
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);
}
优点: 可以轻松地临时制作,模块化,并且可以轻松地为同一意图设置多个onClick
。
缺点: 在回顾时难以阅读。
OnClickListener()
。(中级)这是当您为每个分别设置单独的setOnClickListener()
,并覆盖每个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);}
});
优点: 可以轻松地快速制作。
缺点: 将会有很多匿名类,这将使得在审核时难以阅读。
switch
语句的 Activity 全局接口方法。(非“专业”)当您在 onClick()
方法中为按钮使用 switch
语句来管理所有 Activity 的按钮时,就会出现这种情况。
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应用程序中在Activity之间传递数据?
编辑:不是“Pro”
创建一个到ViewPerson活动的意图,并传递PersonID(例如用于数据库查找)。
Intent i = new Intent(getBaseContext(), ViewPerson.class);
i.putExtra("PersonID", personID);
startActivity(i);
然后在ViewPerson Activity中,你可以获取额外数据的bundle,确保它不为空(以防有时候没有传递数据),然后获取数据。
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
<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);
}
Intent iinent= new Intent(Homeactivity.this,secondactivity.class);
startActivity(iinent);
Intent in = new Intent(getApplicationContext(),SecondaryScreen.class);
startActivity(in);
This is an explicit intent to start secondscreen activity.
第一个 Activity
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"))
startActivity(new Intent(MainActivity.this, SecondActivity.class));
Emmanuel,
我认为额外的信息应该在启动活动之前放置,否则如果您在NextActivity的onCreate方法中访问它,则数据将尚不可用。
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
myIntent.putExtra("key", value);
CurrentActivity.this.startActivity(myIntent);
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);