协慌网

登录 贡献 社区

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

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

答案

简单的。

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

当前的反应很好,但是对于初学者来说,需要一个更全面的答案。有 3 种不同的方法可以在 Android 中启动新活动,它们都使用Intent类。意图 Android 开发人员

  1. 使用onClick属性。 (初学者)
  2. 通过匿名类分配OnClickListener() (中间的)
  3. 活动范围接口方法使用switch语句。 (专业版)

如果您想继续,以下是我的示例的链接:

1. 使用onClick属性。 (初学者)

按钮具有在. xml 文件中找到onClick

<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设置为相同的意图。

缺点:审查时可读性差。

2. 通过匿名类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);}
            });

优点:易于即时制作。

劣势:将有很多匿名类,这将使审阅时的可读性变得困难。

switch语句的活动范围接口方法。 (专业版)

这是在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 应用程序的 “活动” 之间传递数据?

为 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