zoukankan      html  css  js  c++  java
  • 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()));
    
        }
    }
    复制代码

  • 相关阅读:
    解决“验证码代码完毕且页面代码没问题但网页无法显示验证码图片”
    关于服务器已经启动“localhost拒绝你的请求”
    解决eclipse项目在浏览器中启动时老是报404错误可是路径没错
    解决“错误: 找不到或无法加载主类 org.apache.catalina.startup.Bootstrap”
    解决“The Tomcat server configuration at ServersTomcat v8.0 Server at localhost-config is missing. Check the server for errors.”
    解决“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”
    解决“JSONArray cannot be resolved to a type”
    Windows10系统截图
    解决“ eclipse出现Exception in thread ‘main’ java.lang.NoClassDefFoundError”
    解决“has value‘1.7’,but 'jdk1.8' is requred”
  • 原文地址:https://www.cnblogs.com/hrzgj/p/14850848.html
Copyright © 2011-2022 走看看