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

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

1022779 次浏览

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

简单。

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"/>

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

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

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

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

伊曼纽尔,

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

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


myIntent.putExtra("key", value);


CurrentActivity.this.startActivity(myIntent);

您可以尝试此代码:

Intent myIntent = new Intent();
FirstActivity.this.SecondActivity(myIntent);
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.

当用户单击按钮时,直接在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);
}

从发送活动中尝试以下代码

   //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"
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);

目前的反应很好,但初学者需要更全面的答案。在Android中启动新活动有3种不同的方式,它们都使用Intent类;意图|Android Developers

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

优势:易于动态制作,模块化,并且可以轻松地将多个onClick设置为相同的意图。

缺点:复习时难以易读性。

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

这是当您为每个button设置单独的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);}
});

优势:易于在飞行中制作。

缺点:会有很多匿名类,这会使复习时的易读性变得困难。

  1. 使用switch语句的活动宽接口方法。(不是-"Pro")

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

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应用程序中的活动之间传递数据?

编辑:不-“Pro”

试试这个简单的方法。

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

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

如何创建意图对象?

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

  1. 背景
  2. 活动名称要启动。(或完整的包名称)

示例:

输入图片描述

例如,如果您有两个活动,例如HomeActivityDetailActivity,您希望从HomeActivity (首页活动-->详细活动)。开始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);
}


});

实现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;
}

从这个活动开始另一个活动,你也可以通过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");

虽然已经提供了正确的答案,但我在这里用静态编程语言搜索答案。这个问题不是特定于语言的,所以我添加了代码来完成静态编程语言的任务。

以下是如何在andorid的静态编程语言中执行此操作

testActivityBtn1.setOnClickListener{
val intent = Intent(applicationContext,MainActivity::class.java)
startActivity(intent)


}

首先在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);
}
});

点击按钮时:

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
}

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

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

像下面这样在xml中放置按钮小部件

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>

之后,初始化和处理单击侦听器在活动像下面。

在活动创建方法中:

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

静态编程语言

第一次活动

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"))

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

  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>

一个老问题,但如果目标是切换显示的页面,我只有一个活动,当我想切换页面时调用setContentView()(通常是响应用户点击按钮)。这允许我简单地从一个页面的内容调用到另一个页面。没有意图疯狂的额外包裹捆绑和任何试图来回传递数据的东西。

我像往常一样在res/布局中制作了一堆页面,但没有为每个页面制作活动。只需使用setContentView()根据需要切换它们。

所以我唯一的onCreate()有:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


LayoutInflater layoutInflater = getLayoutInflater();


final View mainPage = layoutInflater.inflate(R.layout.activity_main, null);
setContentView (mainPage);
Button openMenuButton = findViewById(R.id.openMenuButton);


final View menuPage = layoutInflatter.inflate(R.layout.menu_page, null);
Button someMenuButton = menuPage.findViewById(R.id.someMenuButton);


openMenuButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setContentView(menuPage);
}
});


someMenuButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
do-something-interesting;
setContentView(mainPage);
}
}
}

如果您希望返回按钮在退出应用程序之前返回内部页面,只需包装setContentView()以将页面保存在一个小页面堆栈中,然后在onBackP的()处理程序中弹出这些页面。

//在静态编程语言中,您可以按照 /*在第一个活动中,让活动布局中有一个ID为按钮的按钮。 假设我必须将数据作为String类型从一个活动传递到另一个活动*/

     val btn = findViewById<Button>(R.id.button)
btn.setOnClickListener {
val intent = Intent(baseContext, SecondActivity::class.java).apply {
putExtra("KEY", data)
}
startActivity(intent)
}

//在第二个活动中,你可以从另一个活动中获取数据

 val name = intent.getStringExtra("KEY")

/*假设你必须传递一个自定义对象,那么它应该是Parcelable。 让有类拼贴类型,我必须从一个活动传递到另一个活动 */

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize


@Parcelize
class Collage(val name: String, val mobile: String, val email: String) : Parcelable

/*活动首先,让这里的数据是拼贴类型。我必须传递给另一个活动。*/

val btn = findViewById<Button>(R.id.button)
btn.setOnClickListener {
val intent = Intent(baseContext, SecondActivity::class.java).apply {
putExtra("KEY", data)
}
startActivity(intent)
}

//然后从第二个活动我们将得到

val item = intent.extras?.getParcelable<Collage>("KEY")

您的按钮xml:

 <Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="jump to activity b"
/>

Mainactivity.java:

 Button btn=findViewVyId(R.id.btn);
btn.setOnClickListener(btnclick);
btnclick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setClass(Mainactivity.this,b.class);
startActivity(intent);
}
});
 imageView.setOnClickListener(v -> {
// your code here
});
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SplashActivity.this,HomeActivity.class);
startActivity(intent);
}
});

静态编程语言2022

最简单的方法:

val a = Intent(this.context, BarcodeActivity::class.java)
a.putExtra("barcode", barcode)
startActivity(a)

在另一边(我的案例中的BarcodeActive):

val intent: Intent = intent
var data = intent.getStringExtra("barcode")

阅读更多这里