android 实现页面跳转及数据的传递和返回

1.实现效果:

原始界面:     ----传输数据----------> 填写数据后,点击计算后界面-----返回数据----->点击返回按钮后,回到上一个页面,依旧能够保留之前保持的数据

                                 

2.实现代码:

a.两个布局文件:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.activity_return.MainActivity">
<TextView
android:textSize="30sp"
android:layout_marginTop="30dp"
android:layout_marginLeft="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title" />
<LinearLayout
android:layout_marginTop="30dp"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:textSize="20sp"
android:text="@string/sex"
android:layout_marginLeft="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioGroup
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:checked="true"
android:layout_marginLeft="10dp"
android:id="@+id/rb1"
android:text="@string/man"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:layout_marginLeft="30dp"
android:id="@+id/rb2"
android:text="@string/woman"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_marginTop="10dp"
android:layout_marginLeft="50dp"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:text="@string/height"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/et"
android:layout_marginLeft="10dp"
android:background="@drawable/bg_edittext"
android:layout_width="80dp"
android:layout_height="wrap_content" />
<TextView
android:layout_marginLeft="10dp"
android:text="cm"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<Button
android:layout_marginTop="50dp"
android:layout_marginLeft="100dp"
android:id="@+id/bt"
android:text="@string/calculate"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

new_activity.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/text"
android:layout_marginLeft="50dp"
android:layout_marginTop="50dp"
android:textSize="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:text="返回"
android:layout_marginTop="20dp"
android:layout_marginLeft="50dp"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

b.两个activity.java文件:
MainActivity.java:
public class MainActivity extends AppCompatActivity {
private EditText et;
private RadioButton rb1;
private RadioButton rb2;
private Button bt;
private Double height;
private String sex;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化控件
initData();
//实现跳转
jump();
}
private void initData(){
et=(EditText)findViewById(R.id.et);
bt=(Button)findViewById(R.id.bt);
rb1=(RadioButton)findViewById(R.id.rb1);
rb2=(RadioButton)findViewById(R.id.rb2);

}
private void jump(){
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str=et.getText().toString();
//一定要注意这一步的判断,因为用户可能没有填写身高就提交了,那么这种情况下会导致程序奔溃
if(!str.equals("")) height=Double.parseDouble(et.getText().toString());
else{
et.setHint("请输入身高");
return;
}
//那么对于这种情况,我们可以在布局文件中先设置某个按钮默认的checked为true,然后根据用户来更改
if(rb1.isChecked()){
sex="M";
}else{
sex="F";
}
Intent intent=new Intent();
intent.setClass(MainActivity.this,New_Activity.class);
//利用bundle来存取数据
Bundle bundle=new Bundle();
bundle.putDouble("height",height);
bundle.putString("sex",sex);
//再把bundle中的数据传给intent,以传输过去
intent.putExtras(bundle);
startActivityForResult(intent,0);
}
});
}
//这里是设置获取从第二页面中返回的数据,如果我们没有设置这个的话,我们返回该页面,那么数据都会清空
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){//如果是返回的标识
//获取数据
Bundle bundle=data.getExtras();
sex=bundle.getString("sex");
height=bundle.getDouble("height");
//保留之前的数据
if(sex.equals("M")){
rb1.setChecked(true);
}else{
rb2.setChecked(true);
}
String str=height.toString();
et.setText(str);
}
}
}
new_activity.java:
public class New_Activity extends Activity {
private TextView textView;
private String sex;
private String sexText;
private Double height;
private String weight;
private Button button;
private Intent intent;
private Bundle bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_layout);
initData();
//设置返回上一个页面的数据
setBackData();
}
private void initData(){
textView=(TextView)findViewById(R.id.text);
button=(Button)findViewById(R.id.button1);
//获取上个页面传输过来的数据放在intent中
intent=this.getIntent();
bundle=intent.getExtras();
sex=bundle.getString("sex");
height=bundle.getDouble("height");
if(sex.equals("M")){
sexText="男性";
}else{
sexText="女性";
}
getWeight();
}
private void getWeight(){
if(sex.equals("M")){
weight=(height-80)*0.7+"";
}else{
weight=(height-70)*0.6+"";
}
}
private void setBackData(){
textView.setText("你是一位"+sexText+"\n你的身高是"+height+"厘米\n你的标准体重是"+weight+"公斤");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//因为我们在initData中已经将传输过来的数据放在intent中,所以这里我们直接用intent即可
setResult(RESULT_OK,intent);
finish();
}
});
}
}

 

转载于:https://www.cnblogs.com/xy95/p/5860698.html

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio页面跳转数据传递和回传是指在不同的Activity之间传递数据的过程。在Android中,可以通过Intent对象来实现页面跳转数据传递。具体步骤如下: 1. 在发送数据的Activity中创建Intent对象,并使用putExtra()方法将数据添加到Intent中。 2. 调用startActivity()方法启动目标Activity,并将Intent对象作为参数传递给该方法。 3. 在目标Activity中,使用getIntent()方法获取传递过来的Intent对象,并使用getStringExtra()等方法获取传递过来的数据。 4. 如果需要回传数据,可以在目标Activity中创建一个新的Intent对象,并使用putExtra()方法将数据添加到Intent中。 5. 在目标Activity中调用setResult()方法设置返回结果,并使用finish()方法关闭当前Activity。 6. 在发送数据的Activity中,重写onActivityResult()方法获取返回数据。 以上就是Android Studio页面跳转数据传递和回传的基本步骤。 ### 回答2: Android Studio 页面跳转是指在一个activity中点击某个按钮,然后进入另外一个activity的过程。在这个过程中,我们可能需要传递一些数据到下一个activity,或者在下一个activity中对数据进行操作后再回传给上一个activity。Android Studio提供了多种方法来实现这个过程,下面我们就来具体讲述。 在跳转到下一个activity的过程中,我们可以使用intent来传递数据。在上一个activity中,我们可以这样定义一个intent: Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("name", "小明"); startActivity(intent); 在下一个activity中,我们可以这样获取到上一个activity中传递过来的数据: String name = getIntent().getStringExtra("name"); 在这个例子中,我们传递了一个字符串数据name到下一个activity中,并且在下一个activity中获取到了这个数据。 接下来,我们来讲一下如何实现回传数据。在上一个activity中,我们可以这样启动下一个activity: Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, 1); 在下一个activity中,我们可以这样设置结果: Intent intent = new Intent(); intent.putExtra("result", "操作成功"); setResult(RESULT_OK, intent); finish(); 在上一个activity中,我们可以这样获取到下一个activity返回数据: protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK) { String result = data.getStringExtra("result"); textView.setText(result); } } 这就是Android Studio页面跳转数据传递和回传的基本实现方法。需要注意的是,在回传数据的时候,我们必须使用setResult方法将数据设置回去,并且在下一个activity中一定要调用finish方法,不然上一个activity就无法接收到下一个activity返回数据。 ### 回答3: Android Studio 是广泛使用的移动应用开发平台,开发者可以使用它来设计各种应用程序。在开发过程中,页面之间的数据传递和回传是必不可少的。下面将详细介绍 Android Studio 页面跳转数据传递和回传的几种方法。 一. 页面跳转数据传递 1. 使用Intent传递数据 Intent 是Android中组件之间通信的基础。开发者可以在一个Activity中创建并配置一个Intent,然后在“startActivity”方法中启动另一个Activity。使用Intent传递数据的代码实例如下: ``` // 创建一个 Intent 对象 Intent intent = new Intent(MainActivity.this, SecondActivity.class); // 传递数据 intent.putExtra("key", value); // 启动另一个Activity startActivity(intent); ``` 在接受数据的Activity中,可以通过以下方式获取传递数据: ``` String value = getIntent().getStringExtra("key"); ``` 2. 使用Bundle传递数据 Bundle 是一种存储键值对的容器,也是在Activity之间传递数据的一种方式。使用Bundle传递数据的代码实例: ``` // 创建 Bundle 对象 Bundle bundle = new Bundle(); // 存入数据 bundle.putString("key", value); // 创建 Intent 对象 Intent intent = new Intent(MainActivity.this, SecondActivity.class); // 传递 Bundle 对象 intent.putExtras(bundle); // 启动另一个 Activity startActivity(intent); ``` 在接受数据的Activity中,可以通过以下方式获取传递数据: ``` Bundle bundle = getIntent().getExtras(); String value = bundle.getString("key"); ``` 二. 页面跳转数据回传 1. 使用startActivityForResult()方法传递数据 使用 startActivityForResult() 方法启动一个Activity可以在另一个Activity中接收传递的结果和数据。代码实例如下: ``` // 创建 Intent 对象 Intent intent = new Intent(MainActivity.this, SecondActivity.class); // 启动带返回结果的Activity startActivityForResult(intent, requestCode); ``` requestCode 是用来标识请求的代码,可以根据需要自行定义。 在另一个 Activity 中返回结果数据: ``` Intent intent = new Intent(); intent.putExtra("key", value); setResult(RESULT_OK, intent); finish(); ``` 在第一个Activity中,可以通过onActivityResult()方法获取传递回来的数据: ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { String value = data.getStringExtra("key"); //处理传递回来的数据 } } ``` 以上就是Android Studio页面跳转数据传递和回传的方法,开发者可以根据具体需求来选择适合自己的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值