在Android应用程序中,当单击另一个活动中的按钮时,如何启动一个新活动(GUI),以及如何在这两个活动之间传递数据?
当前回答
在android应用程序中,从另一个活动启动一个活动是非常常见的场景。 要启动一个活动,你需要一个Intent对象。
如何创建意图对象?
意图对象的构造函数中有两个形参
上下文 要启动的活动的名称。(或完整包名)
例子:
例如,如果你有两个活动,说HomeActivity和DetailActivity,你想从HomeActivity启动DetailActivity (HomeActivity—>DetailActivity)。
下面是演示如何启动DetailActivity的代码片段
HomeActivity。
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);
}
});
其他回答
当用户点击按钮时,直接在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);
}
启动新活动的方法是广播一个意图,您可以使用特定类型的意图将数据从一个活动传递到另一个活动。我的建议是你去看看Android开发者文档中与intent相关的内容;这是一个丰富的信息的主题,并有例子。
一件容易的事。
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"/>
Intent i = new Intent(firstactivity.this, secondactivity.class);
startActivity(i);
//在Kotlin中,你可以这样做 /*在第一个活动中,让在活动布局中有一个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)
}
//那么从第二个Activity中我们将得到as
val item = intent.extras?.getParcelable<Collage>("KEY")
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件