手记

通过Parcelable将对象传递到上一个Activity

我们先用一个点击注册,然后注册完之后,把用户名和密码都传送到登录页的例子。

写User这个类

package com.example.gogearsrunapplication.bean;

import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;

public class User implements Parcelable {
    private String id ;
    private String username ;
    private String password;
    private String userIntro;
    private Boolean angelMode;
    private String userIcon;
    public User(){

    }


    protected User(Parcel in) {
        id = in.readString();
        username = in.readString();
        password = in.readString();
        userIntro = in.readString();
        byte tmpAngelMode = in.readByte();
        angelMode = tmpAngelMode == 0 ? null : tmpAngelMode == 1;
        userIcon = in.readString();
    }

    public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
            User user = new User();
            user.id = source.readString();
            user.username = source.readString();
            user.password = source.readString();
            user.userIntro = source.readString();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                user.angelMode = source.readBoolean();
            }
            user.userIcon = source.readString();

            return user;
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(id);
        dest.writeString(username);
        dest.writeString(password);
        dest.writeString(userIntro);
        dest.writeByte((byte) (angelMode == null ? 0 : angelMode ? 1 : 2));
        dest.writeString(userIcon);
    }
}

接下来写出这个Layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <EditText
        android:id="@+id/edt_user_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:textSize="18dp"
        android:hint="用户名"/>
    <EditText
        android:id="@+id/edt_user_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="密码"
        android:textColor="#000000"/>
    <CheckBox
        android:id="@+id/remember_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="记住密码"
        android:textColor="#000000"
        android:textSize="15dp"/>
    <Button
        android:id="@+id/btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="登录"
        android:textSize="18dp"
        android:textColor="#000000"/>
    <Button
        android:id="@+id/btn_register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注册"
        android:textColor="#000000"
        android:textSize="18dp"/>



</LinearLayout>

接下来是Register的Layout:

layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_height="match_parent"
    tools:context=".RegisterActivity">
    <EditText
        android:id="@+id/userName_register"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Email"
        android:textSize="18dp"
        android:textColorHint="#707070"
        android:textColor="#000000"/>
    <EditText
        android:id="@+id/password_register"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="password"
        android:textSize="18dp"
        android:textColorHint="#707070"
        android:textColor="#000000"/>
    <Button
        android:id="@+id/submit_register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提交"
        android:textSize="18dp"
        android:textColor="#000000"/>

</LinearLayout>

MainActivity.java 的主代码:

package com.example.restryapplication;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;


import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.edt_user_name)
    EditText edtUserName;
    @BindView(R.id.edt_user_password)
    EditText edtUserPassword;
    @BindView(R.id.remember_password)
    CheckBox rememberPassword;
    @BindView(R.id.btn_login)
    Button btnLogin;
    @BindView(R.id.btn_register)
    Button btnRegister;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.btn_login, R.id.btn_register})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_login:
                break;
            case R.id.btn_register:
                Intent intent = new Intent(this,RegisterActivity.class);
                startActivityForResult(intent,1);
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case 1:
                if(resultCode == RESULT_OK) {
                    User user =data.getParcelableExtra("userName_password");
                   String userName = user.getUserName();
                   String password = user.getPassword();
                   edtUserName.setText(userName);
                   edtUserPassword.setText(password);



                }
                break;
            default:
        }
    }
}

RegisterActivity.java :

package com.example.restryapplication;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class RegisterActivity extends AppCompatActivity {

    @BindView(R.id.userName_register)
    EditText userNameRegister;
    @BindView(R.id.password_register)
    EditText passwordRegister;
    @BindView(R.id.submit_register)
    Button submitRegister;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        ButterKnife.bind(this);
    }

    @OnClick(R.id.submit_register)
    public void onViewClicked() {
        String userName = userNameRegister.getText().toString();
        String password = passwordRegister.getText().toString();
        User user = new User();
        user.setUserName(userName);
        user.setPassword(password);
        Intent intent = new Intent(RegisterActivity.this,MainActivity.class);
        intent.putExtra("userName_password",user);
        setResult(RESULT_OK,intent);
        finish();

    }
}



完成!

0人推荐
随时随地看视频
慕课网APP