Android页面数据传递的两种方式

在android中实现页面中数据的传递有两种方式:
1:第一种数据传递的方式是通过inputExtra方法来进行数据的传递的
2:第二中方法是通过bundle的方法来实现数据的传递的
接下来我们首先来讲解一下数据传递的第一种方式就是通过inputExtra
的方式来实现数据的传递。
步骤:
第一步就是在MainActivity中使用Intent.putExtra来编写要传递的数据信息
第二步就是在想要接受数据的Activity中编写程序接收信息
好的接下来我没使用代码的方式来进行演练:

1:在MainActivity.java中编写将要传递的数据
intent.putExtra("name","value");
2:在想要接收数据的Activity中接收数据
Intent intent = getIntent();//获取intent对象
//将获取到的对象赋值给name
String name = intent.getStringExtra("name")
//将获取到的对象显示在页面即是在页面跳转的同时将对象显示出来
//这里用到的是Toast.maketext方法
Toast.maketext(SecondActivity.this“此处指代的是获取到的对象”,"获取到的对象名为"+name,Toast.length_logs).show();
到此我们在android中使用putExtra方法获取对象就完毕了。接下来是完整的代码演示


MainActivity中的代码:

package com.example.one;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Switch;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //为跳转的页面设置单机响应事件,使用接口的方式去实现
        findViewById(R.id.start).setOnClickListener(this);
        findViewById(R.id.start2).setOnClickListener(this);
        //在此处设置单机的点击事件完毕

    }

    @Override
    public void onClick(View view) {
        //使用switch case的方式去实现activity的开启和关闭
        switch(view.getId()) {
            case R.id.start://使用显式布局的方式来实现页面的跳转
             //使用显示以土地额方式实现页面的跳转也是要创建Intent对象
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                //第一个参数和开启关闭activity一样都是上下文的信息,第二个参数就是要开启的页面
                //使用putExtra方法获得数据的回显
                intent.putExtra("Demo", "你的名字");
                //使用putExtra方法将数据传递到第二个页面,接下来我们要在第二个页面接受数据
                startActivity(intent);
                break;
            case R.id.start2://使用显式布局的方式来实现页面的跳转
                Intent intent1 = new Intent(MainActivity.this,ThreeActivity.class);
                startActivity(intent1);
                break;
                //既然它的run的速度这么慢的话我们就先来了解一些概念性的东西
               /*
               *  Inntent也称为意图可以实现程序中不同的组件中的数据的交互,不仅可以指定当前组件要完成的动作,还可以实现不同组件之间的数据的交互
               *  它的意图有显示的意图还有隐式的意图,显示的意图就是直接通过名称的方式来打开指定的activity,隐式的意图就是指通过action和category的方式
               * 系统通过分析然后找到指定的activity。

               * */

        }
    }
}

在这里插入图片描述在SecondActivity中的代码:

package com.example.one;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        //在这个页面接受数据
//        第一步:获取intent对象,在这个位置要注意将包导入进去
        Intent intent = getIntent();
         //使用getStringExtra方法将获取传递过来的数据的名称我们可以看到我们已将数据的名称获取进来了
        //记住在此处获取到它的对象后记得要将它的对象赋值个name或是其他的什么名称都行不然程序会报错
        String name  =  intent.getStringExtra("Demo");
         //使用Toast.maketext方法将数据显示出来
//        Toast.makeText(SecondActivity.this,"获取到的名字为"+name,Toast.LENGTH_LONG).show();
        Toast.makeText(SecondActivity.this,"获取到的名字为"+name,Toast.LENGTH_LONG).show();
    }
}

在这里插入图片描述android传递数据的第二中方式第二种传递数据的方式是bundle:
它传递数据的方式是:
第一步是创建bundle对象
Bundle bundle = new bundle();
第二步是使用bundle.putString方法将要传递数据的名和值传递进去
bundle.putString(name,value)
第三步就是将bundle对象封装进intent对象中,使用的是intent.putExtras方法
intent.putExtras(bundle)
这是传递数据部分
接受数据部分:
第一步就是获取bundle对象
Bundle bundle = getIntent().getExtras();
第二步就是将获取到的名字赋值个某个变量
String name = bundle.getString(“name”);

package com.example.one;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Switch;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //为跳转的页面设置单机响应事件,使用接口的方式去实现
        findViewById(R.id.start).setOnClickListener(this);
        findViewById(R.id.start2).setOnClickListener(this);
        //在此处设置单机的点击事件完毕

    }

    @Override
    public void onClick(View view) {
        //使用switch case的方式去实现activity的开启和关闭
        switch(view.getId()) {
            case R.id.start://使用显式布局的方式来实现页面的跳转
             //使用显示以土地额方式实现页面的跳转也是要创建Intent对象
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                //第一个参数和开启关闭activity一样都是上下文的信息,第二个参数就是要开启的页面
                //使用putExtra方法获得数据的回显
                intent.putExtra("Demo", "你的名字");
                //使用putExtra方法将数据传递到第二个页面,接下来我们要在第二个页面接受数据


                startActivity(intent);
                break;
            case R.id.start2://使用显式布局的方式来实现页面的跳转
                Intent intent1 = new Intent(MainActivity.this,ThreeActivity.class);
                //使用bundle的方式来将数据给thiee
                //第一步创建bundle对象
                Bundle bundle = new Bundle();
                //第二步使用bundle.putString方法传递进来名和值
                bundle.putString("name","第三个activity");
                //第三步将bundle对象封装进intent对象中
                intent1.putExtras(bundle);
                startActivity(intent1);
                break;
                //既然它的run的速度这么慢的话我们就先来了解一些概念性的东西
               /*
               *  Inntent也称为意图可以实现程序中不同的组件中的数据的交互,不仅可以指定当前组件要完成的动作,还可以实现不同组件之间的数据的交互
               *  它的意图有显示的意图还有隐式的意图,显示的意图就是直接通过名称的方式来打开指定的activity,隐式的意图就是指通过action和category的方式
               * 系统通过分析然后找到指定的activity。

               * */

        }
    }
}

在这里插入图片描述

package com.example.one;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class ThreeActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_three);
        //获取传递过来的bundle数据
        //获取bundle对象
        Intent intent1 = getIntent();
        Bundle bundle = intent1.getExtras();
        //获取用户名
        String name = bundle.getString("name");
        //将数据显示出来
        Toast.makeText(ThreeActivity.this,"获取到的用户名"+name,Toast.LENGTH_LONG).show();
    }
}

在这里插入图片描述在这里插入图片描述
好的导致在android中数据传递的两种方式就已经讲解完毕了。

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android Studio中,页面跳转并传递List数据通常使用两种方式:通过Intent或通过ViewModel和LiveData。 1. **使用Intent传递**: - 创建一个包含List数据的Intent: ```java List<String> dataList = ...; // 假设这是一个String类型的List Intent intent = new Intent(StartingActivity.this, DestinationActivity.class); intent.putExtra("data_key", dataList); ``` - 在目标Activity(DestinationActivity)中接收数据: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle extras = getIntent().getExtras(); if (extras != null) { List<String> dataList = extras.getSerializable("data_key"); // 使用数据列表 } } ``` 2. **使用ViewModel和LiveData**: - 在ViewModel中创建一个LiveData<List<String>>: ```kotlin class DataViewModel : ViewModel() { private val _dataList = MutableLiveData<List<String>>() val dataList: LiveData<List<String>> = _dataList fun setData(dataList: List<String>) { _dataList.value = dataList } } ``` - 在StartingActivity中设置数据并启动新Activity: ```kotlin val viewModel = ViewModelProvider(this).get(DataViewModel::class.java) viewModel.setData(dataList) startActivity(Intent(this, DestinationActivity::class.java)) finish() ``` - 在DestinationActivity中观察LiveData: ```kotlin class DestinationActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ViewModelProvider(this).observe(this, viewModel.dataList) { data -> // 处理接收到的数据列表 } } } ``` **相关问题--:** 1. 如何在Android Studio中使用AndroidX的ViewModel进行数据传递? 2. 使用Intent传递数据时,如何处理空的情况? 3. 如果数据量非常大,使用哪种方式更高效?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值