Android使用Intent传值注意(传递Bean对象)

本文详细介绍如何使用Intent和Intent结合Bundle在Android应用中传递Bean对象。通过序列化实现Serializable或Parcelable接口,确保数据安全传输。同时,文章提供了具体代码示例,包括封装的方法和取值注意事项。

1、使用Intent或者Intent结合Bundle传递Bean,并且bean对象一定要进行序列化实现Serializable或者Parcelable

1)、封装好的方法
使用Intent
public static void startAction(Context context, PointDetailData.ResultBean.DataBean dataBean) {
        Intent intent = new Intent(context, UndistributedMachineActivity.class);
        intent.putExtra("dataBean", dataBean);
        context.startActivity(intent);
    }

使用Intent结合Bundle
 public static void startAction(Context context, PointDetailData.ResultBean.DataBean dataBean) {
        Intent intent = new Intent(context, UndistributedMachineActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable("dataBean", dataBean);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }

2、取值(坑坑坑切记不要使用new Intent().getIntent.getSerializableExtra("dataBean"))

private PointDetailData.ResultBean.DataBean dataBean;//定义属性
dataBean = (PointDetailData.ResultBean.DataBean) getIntent().getSerializableExtra("dataBean");

 

package com.wsxxkjbj.daqershoucecb.fragment.home; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.hfd.common.base.BaseActivity; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import com.wsxxkjbj.daqershoucecb.R; import com.wsxxkjbj.daqershoucecb.utils.DataSingleton; import com.wsxxkjbj.daqershoucecb.utils.OnMultiClickListener; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; import com.wsxxkjbj.daqershoucecb.view.ProvincePickerSheet; import java.util.Arrays; import java.util.Calendar; import java.util.TimeZone; public class JzAssessActivity extends BaseActivity { private ProvincePickerSheet sheet; private String province; TextView tvBack,etTime,etCharacter,etColor; EditText etType, etMileage, etBelong,etNumber; QMUIRoundButton btnPg; private String receivedData; private BroadcastReceiver dataReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if ("com.example.DATA_BROADCAST".equals(intent.getAction())) { receivedData = intent.getStringExtra("data"); } } }; @Override protected int setLayout() { return R.layout.activity_jz_assess; } @Override protected void setView() { tvBack = fvbi(R.id.tv_back); etType = fvbi(R.id.et_type); etTime = fvbi(R.id.et_time); etColor = fvbi(R.id.et_color); etNumber = fvbi(R.id.et_number); etBelong = fvbi(R.id.et_belong); etCharacter = fvbi(R.id.et_character); etMileage = fvbi(R.id.et_mileage); btnPg = fvbi(R.id.btn_pg); } @Override protected void setData() { sheet = new ProvincePickerSheet(Arrays.asList(getResources().getStringArray(R.array.province_list)), province -> { // 回调 this.province = province; etCharacter.setText(province); }); IntentFilter filter = new IntentFilter("com.example.DATA_BROADCAST"); registerReceiver(dataReceiver, filter); Toast.makeText(mContext, ""+receivedData, Toast.LENGTH_SHORT).show(); etColor.setText(receivedData); } @Override protected void setClick() { tvBack.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { finish(); } }); btnPg.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { Bundle bundle = new Bundle(); bundle.putInt("imageResId", R.mipmap.img_jz_bg); bundle.putString("province",province); toClass(OutcomeActivity.class, bundle); } }); etTime.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { // 获取当前日期 Calendar now = Calendar.getInstance(); DatePickerDialog dpd = DatePickerDialog.newInstance( (view, year, monthOfYear, dayOfMonth) -> { // 由于 Calendar 月份从 0 开始,这里将其转换为从 1 开始的月份 int actualMonth = monthOfYear + 1; // 处理选择的年份 etTime.setText(year+"-"+actualMonth+"-"+dayOfMonth); }, now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH) ); // 显示日期选择对话框 dpd.show(getSupportFragmentManager(), "Datepickerdialog"); } }); etCharacter.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { sheet.show(getSupportFragmentManager(), "ProvincePickerSheet"); } }); etColor.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { toClass(ColorActivity.class); } }); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(dataReceiver); } }package com.wsxxkjbj.daqershoucecb.fragment.home; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.hfd.common.base.BaseActivity; import com.qmuiteam.qmui.alpha.QMUIAlphaButton; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import com.wsxxkjbj.daqershoucecb.R; import com.wsxxkjbj.daqershoucecb.bean.ColorBean; import com.wsxxkjbj.daqershoucecb.fragment.Adapter.ColorAdapter; import com.wsxxkjbj.daqershoucecb.utils.DataSingleton; import com.wsxxkjbj.daqershoucecb.utils.OnMultiClickListener; import java.util.ArrayList; public class ColorActivity extends BaseActivity implements ColorAdapter.OnItemSelectedListener { TextView ivBack; RecyclerView rv; String name; QMUIRoundButton btnPg; @Override protected int setLayout() { return R.layout.activity_color; } @Override protected void setView() { ivBack = fvbi(R.id.tv_back); btnPg = fvbi(R.id.btn_pg); rv = fvbi(R.id.rv); } @Override protected void setData() { ArrayList<String> colorBean = new ArrayList<>(); colorBean.add("白色"); colorBean.add("黑色"); colorBean.add("灰色"); colorBean.add("银色"); colorBean.add("蓝色"); colorBean.add("绿色"); colorBean.add("黄色"); colorBean.add("橙色"); colorBean.add("红色"); colorBean.add("金色"); colorBean.add("棕色"); colorBean.add("紫色"); colorBean.add("青色"); colorBean.add("其他"); ColorAdapter colorAdapter = new ColorAdapter(this,colorBean,this); rv.setLayoutManager(new GridLayoutManager(this,2)); rv.setAdapter(colorAdapter); } @Override protected void setClick() { ivBack.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { finish(); } }); btnPg.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { Intent intent = new Intent("com.example.DATA_BROADCAST"); intent.putExtra("data", name); sendBroadcast(intent); finish(); } }); } @Override public void onItemSelected(String selectedValue) { name = selectedValue; } }这两个activity页面使用广播没有效果,先进的JzAssessActivity跳转到ColorActivity拿到,再回到JzAssessActivity给etColor赋ColorActivity拿到的,这么一个流程
最新发布
11-01
若在 Android 开发中使用广播无效,可考虑使用 `startActivityForResult` 方法来实现从 `JzAssessActivity` 跳转到 `ColorActivity` 获取,再回到 `JzAssessActivity` 给 `etColor` 赋的功能。 ### JzAssessActivity 代码示例 ```java package com.wsxxkjbj.daqershoucecb.fragment.home; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.hfd.common.base.BaseActivity; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import com.wsxxkjbj.daqershoucecb.R; import com.wsxxkjbj.daqershoucecb.utils.DataSingleton; import com.wsxxkjbj.daqershoucecb.utils.OnMultiClickListener; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; import com.wsxxkjbj.daqershoucecb.view.ProvincePickerSheet; import java.util.Arrays; import java.util.Calendar; import java.util.TimeZone; public class JzAssessActivity extends BaseActivity { private ProvincePickerSheet sheet; private String province; TextView tvBack, etTime, etCharacter, etColor; EditText etType, etMileage, etBelong, etNumber; QMUIRoundButton btnPg; private static final int REQUEST_CODE_COLOR = 1; @Override protected int setLayout() { return R.layout.activity_jz_assess; } @Override protected void setView() { tvBack = fvbi(R.id.tv_back); etType = fvbi(R.id.et_type); etTime = fvbi(R.id.et_time); etColor = fvbi(R.id.et_color); etNumber = fvbi(R.id.et_number); etBelong = fvbi(R.id.et_belong); etCharacter = fvbi(R.id.et_character); etMileage = fvbi(R.id.et_mileage); btnPg = fvbi(R.id.btn_pg); String name = DataSingleton.getInstance().getData(); Toast.makeText(this, "" + name, Toast.LENGTH_SHORT).show(); etColor.setText(name); } @Override protected void setData() { sheet = new ProvincePickerSheet(Arrays.asList(getResources().getStringArray(R.array.province_list)), province -> { // 回调 this.province = province; etCharacter.setText(province); }); } @Override protected void setClick() { tvBack.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { finish(); } }); btnPg.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { Bundle bundle = new Bundle(); bundle.putInt("imageResId", R.mipmap.img_jz_bg); bundle.putString("province", province); toClass(OutcomeActivity.class, bundle); } }); etTime.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { // 获取当前日期 Calendar now = Calendar.getInstance(); DatePickerDialog dpd = DatePickerDialog.newInstance( (view, year, monthOfYear, dayOfMonth) -> { // 由于 Calendar 月份从 0 开始,这里将其转换为从 1 开始的月份 int actualMonth = monthOfYear + 1; // 处理选择的年份 etTime.setText(year + "-" + actualMonth + "-" + dayOfMonth); }, now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH) ); // 显示日期选择对话框 dpd.show(getSupportFragmentManager(), "Datepickerdialog"); } }); etCharacter.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { sheet.show(getSupportFragmentManager(), "ProvincePickerSheet"); } }); etColor.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { Intent intent = new Intent(JzAssessActivity.this, ColorActivity.class); startActivityForResult(intent, REQUEST_CODE_COLOR); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_COLOR && resultCode == RESULT_OK) { String selectedColor = data.getStringExtra("selectedColor"); etColor.setText(selectedColor); } } } ``` ### ColorActivity 代码示例 ```java package com.wsxxkjbj.daqershoucecb.fragment.home; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.hfd.common.base.BaseActivity; import com.qmuiteam.qmui.alpha.QMUIAlphaButton; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import com.wsxxkjbj.daqershoucecb.R; import com.wsxxkjbj.daqershoucecb.bean.ColorBean; import com.wsxxkjbj.daqershoucecb.fragment.Adapter.ColorAdapter; import com.wsxxkjbj.daqershoucecb.utils.DataSingleton; import com.wsxxkjbj.daqershoucecb.utils.OnMultiClickListener; import java.util.ArrayList; public class ColorActivity extends BaseActivity implements ColorAdapter.OnItemSelectedListener { TextView ivBack; RecyclerView rv; String name; QMUIRoundButton btnPg; @Override protected int setLayout() { return R.layout.activity_color; } @Override protected void setView() { ivBack = fvbi(R.id.tv_back); btnPg = fvbi(R.id.btn_pg); rv = fvbi(R.id.rv); } @Override protected void setData() { ArrayList<String> colorBean = new ArrayList<>(); colorBean.add("白色"); colorBean.add("黑色"); colorBean.add("灰色"); colorBean.add("银色"); colorBean.add("蓝色"); colorBean.add("绿色"); colorBean.add("黄色"); colorBean.add("橙色"); colorBean.add("红色"); colorBean.add("金色"); colorBean.add("棕色"); colorBean.add("紫色"); colorBean.add("青色"); colorBean.add("其他"); ColorAdapter colorAdapter = new ColorAdapter(this, colorBean, this); rv.setLayoutManager(new GridLayoutManager(this, 2)); rv.setAdapter(colorAdapter); } @Override protected void setClick() { ivBack.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { finish(); } }); btnPg.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { Intent intent = new Intent(); intent.putExtra("selectedColor", name); setResult(RESULT_OK, intent); finish(); } }); } @Override public void onItemSelected(String selectedValue) { name = selectedValue; } } ``` ### 代码解释 - 在 `JzAssessActivity` 中,点击 `etColor` 时使用 `startActivityForResult` 方法启动 `ColorActivity`。 - 在 `ColorActivity` 中,当用户选择颜色并点击 `btnPg` 时,将选择的颜色通过 `Intent` 传递回 `JzAssessActivity`。 - 在 `JzAssessActivity` 的 `onActivityResult` 方法中,接收从 `ColorActivity` 传递回来的数据,并给 `etColor` 赋
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值