3.Android开发笔记:Activity 数据传递

1.向下一个Activity传输数据

1.1 传递普通类型数据

向下一个Activity传输数据:

Intent intent5 = new Intent(FirstActivity.this,SecondActivity.class);
intent5.putExtra("key_ExtData", "Hello,I'm from FirstActivity!!!");
startActivity(intent5);

提取上一个Activity的数据

Intent intent = getIntent();
String data = intent.getStringExtra("key_ExtData");
Log.i("key_ExtData", data);
Toast.makeText(SecondActivity.this, data,Toast.LENGTH_LONG).show();

1.2 传递对象

比如要传递的数据类型是:类Device, 则该类要继承类Serializable

Device.java


public class Device implements Serializable {

    private String num;
    private String name;

    //get and set
    ......

SecondActivity.java

  • 传入对象:intent.putExtra(key,object);
  • 获取对象:intent.getSerializableExtra(key);

public class SecondActivity extends AppCompatActivity {

    private static final String KEY_INTENT_DEVICE ="keyIntent_device";
  
    /**
     * 提供一个静态方法,用于开启该Activity
     * */
    public static void startActivity(Context context, Device device){
        Intent intent = new Intent(context, SecondActivity.class);
        intent.putExtra(KEY_INTENT_DEVICE, device);
        context.startActivity(intent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        LogUtil.v(TAG, "onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_secondactivity );

        Device device = (Device) getIntent().getSerializableExtra(KEY_INTENT_DEVICE);
    }

    ...
}

FirstActivity.java


 Device device = new Device();
 SecondActivity.startActivity(mContext ,device);

2.返回数据给上一个Activity

  1. 跳转使用:startActivityForResult()方法接收两个参数,
    第一个参数还是Intent,
    第二个参数是请求码,用于在之后的回调中判断数据的来源。

跳转到SecondActivity,请求码是2

Intent intent6 = new Intent(FirstActivity.this, SecondActivity.class);
intent6.putExtra("key_ExtData", "Hello,I'm from FirstActivity!!!");
startActivityForResult(intent6, 2);//请求码是2

跳转到ThirtActivity,请求码是3

Button button3 = findViewById(R.id.button1_2);
button3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(FirstActivity.this, ThirtActivity.class);
        intent.putExtra("key_ExtData", "Hello,I'm from FirstActivity!!!");
        startActivityForResult(intent, 3); //请求码是3
    }
});
  1. 在下一个Activity中返回数据

    注意:使用setResult(请求码,intent);返回数据

    Intent intent = new Intent();
    intent.putExtra("return_data","MSG: I'm From SeconActivity~!~~~");
    setResult(2,intent); //请求码是2
    finish();
    
    Intent intent  = new Intent();
    intent.putExtra("return_data", "MSG:I'm From 3th Activity!~~~~");
    setResult(3, intent); //请求码是3
    finish();
    
  2. 在FirstActivity重写响应事件 onActivityResult

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) { //请求码
        case 2: { 
            String string = data.getStringExtra("return_data");
            Log.d("onActivityResult", string);

            break;
        }
        case 3: {
            String string = data.getStringExtra("return_data");
            Log.d("onActivityResult", string);

            break;
        }
        default:
            Log.e("onActivityResult", "no such requestCode:" + requestCode);
            break;
    }
}

如果用户在SecondActivity中并不是通过点击按钮,
而是通过按下Back键回到FirstActivity,这样数据不就没法返回了吗?
我们可以通过在SecondActivity中重写onBackPressed()方法来解决这个问题,

public class ThirtActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_thirt);

        Button button  = findViewById(R.id.button3);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setInfoBack();
            }
        });
    }

    @Override
    public void onBackPressed() {
        setInfoBack();
    }

    private void setInfoBack(){
        Intent intent  = new Intent();
        intent.putExtra("return_data", "MSG:I'm From 3th Activity!~~~~");
        setResult(3, intent);
        finish();
    }
}
posted @ 2020-03-01 20:56  easy5  阅读(213)  评论(0编辑  收藏  举报