• android-----实现不两个不同的activity的跳转和数据传递


        最近学习了android的界面的跳转,一个是activity和fragment之间的跳转(之前的博客说过),一个是不同activity之间的跳转。

        activity直接的跳转很简单,只需要用Intent即可,而且传递数据很简便,如果只是传递简单数据,即可直接使用,如果传递复杂的数据,比如一个类,就得需要把类定义为

        个人觉得android跳转页面要比JAVA的简单的很多!!。看例子。


      下图是从一个Activity跳转到另一个activity,并将数据传递过去。

           


      实体类:(因为我们要传递一个实体类,所有要用到Parcelable)

      Android中的Activity传递数据时,为了方便往往将很多数据封装成对象,然后将整个对象传递过去。传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口。

      先将Grade implements Parcelable,然后点击Grade,会出现一个红色的小灯泡,点击即可,生成的函数不需要动,位置也不要动,否则会保出错。

    package com.example.testparcelable;
    
    import android.os.Parcel;
    import android.os.Parcelable;
    
    public class Student implements Parcelable{
        private String name;
        private int age;
        private Grade grade;
    
        public Student(String name, int age, Grade grade) {
            this.name = name;
            this.age = age;
            this.grade = grade;
        }
    
        protected Student(Parcel in) {
            name = in.readString();
            age = in.readInt();
            grade = in.readParcelable(Grade.class.getClassLoader());
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeInt(age);
            dest.writeParcelable(grade, flags);
        }
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        public static final Creator<Student> CREATOR = new Creator<Student>() {
            @Override
            public Student createFromParcel(Parcel in) {
                return new Student(in);
            }
    
            @Override
            public Student[] newArray(int size) {
                return new Student[size];
            }
        };
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Grade getGrade() {
            return grade;
        }
    
        public void setGrade(Grade grade) {
            this.grade = grade;
        }
    }
    class Grade implements Parcelable {
        private int math;
        private int chinese;
        private int English;
    
        public Grade(int math, int chinese, int english) {
            this.math = math;
            this.chinese = chinese;
            English = english;
        }
    
        protected Grade(Parcel in) {
            math = in.readInt();
            chinese = in.readInt();
            English = in.readInt();
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(math);
            dest.writeInt(chinese);
            dest.writeInt(English);
        }
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        public static final Creator<Grade> CREATOR = new Creator<Grade>() {
            @Override
            public Grade createFromParcel(Parcel in) {
                return new Grade(in);
            }
    
            @Override
            public Grade[] newArray(int size) {
                return new Grade[size];
            }
        };
    
        public int getMath() {
            return math;
        }
    
        public void setMath(int math) {
            this.math = math;
        }
    
        public int getChinese() {
            return chinese;
        }
    
        public void setChinese(int chinese) {
            this.chinese = chinese;
        }
    
        public int getEnglish() {
            return English;
        }
    
        public void setEnglish(int english) {
            English = english;
        }
    }

      MainActivity:为了操作方便我们使用dataBinding,在里android{defaultConfig{}}里设置,然后在activity_main.xml点击text,将鼠标移到该位置,点击小灯泡,如图。转换为data binding layout。这样我们就不用通过获取ID来对控件进行操作。

      

    package com.example.testparcelable;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.databinding.DataBindingUtil;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    
    import com.example.testparcelable.databinding.ActivityMainBinding;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            final ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
            binding.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String name = binding.editTextName.getText().toString();
                    int age = Integer.valueOf(binding.editTextAge.getText().toString());
                    int chinese = Integer.valueOf(binding.editTextChinese.getText().toString());
                    int english = Integer.valueOf(binding.editTextEnglish.getText().toString());
                    int math = Integer.valueOf(binding.editTextMath.getText().toString());
                    Student student = new Student(name,age,new Grade(math,chinese,english) );
                    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                    Bundle bundle = new Bundle();
                    bundle.putParcelable("student",student);
                    intent.putExtra("bundle", bundle);
                    startActivity(intent);
                }
            });
    
        }
    }

      


      main2Activity:对一做同样的操作。 

    package com.example.testparcelable;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.databinding.DataBindingUtil;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    
    import com.example.testparcelable.databinding.ActivityMain2Binding;
    import com.example.testparcelable.databinding.ActivityMainBinding;
    
    import org.w3c.dom.Text;
    
    public class Main2Activity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityMain2Binding binding = DataBindingUtil.setContentView(this, R.layout.activity_main2);
            Intent intent = getIntent();
            Bundle bundle = intent.getBundleExtra("bundle");
            Student student = bundle.getParcelable("student");
            binding.textViewName.setText(student.getName());
            binding.textViewAge.setText(String.valueOf(student.getAge()));
            binding.textViewChinese.setText(String.valueOf(student.getGrade().getChinese()));
            binding.textViewEnglish.setText(String.valueOf(student.getGrade().getEnglish()));
            binding.textViewMath.setText(String.valueOf(student.getGrade().getMath()));
    
        }
    }

         Layout样式:我只截图了,不发代码。截图很清晰可见,容易上手。(名字就是对应的id)

       main_activity.xml:

      

       main_activity2.xml:

      


      

  • 相关阅读:
    css中滚动条设置
    css 字间距
    使用easyDialog弹出层后会刷新页面
    js页面跳转整理
    父容器不根据内容自适应高度的解决方法
    Freemaker 基本语法
    BeanUtils工具包下载及应用
    Java关键字final、static使用总结(二)
    What is a cross-channel pooling in convolutional neural net works?
    仿射梯度
  • 原文地址:https://www.cnblogs.com/yangxiao-/p/12306988.html
Copyright © 2020-2023  润新知