当前位置: 代码迷 >> 综合 >> Android学习笔记(二)Activiy学习——界面传值
  详细解决方案

Android学习笔记(二)Activiy学习——界面传值

热度:83   发布时间:2023-10-31 05:24:25.0

Activity之间传值方法

先创建A.B两个Activiy,在A与B中分别创建一个按钮button,同时分别创建文本框TextView


Intent传值

在A activity中创建按钮监听

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Override
    public void onClick(View v) {//创建一个Intent,能够打开B Activiy
        Intent i = new Intent(MainActivity.this,Main2Activity.class);
        //传入数据,参数一传数据名 参数二传数据
        i.putExtra("tag","hello world");
        startActivity(i);
    }
});
在B activity获取到数据

private TextView txView;
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    Intent i = getIntent();

    txView = (TextView) findViewById(R.id.TxView);
    txView.setText(i.getStringExtra("data"));
}


Bundle数据包传值

在A activity中创建按钮监听

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Override
    public void onClick(View v) {Intent i = new Intent(MainActivity.this,Main2Activity.class);

        Bundle b = new Bundle();
        b.putInt("int",123);
        b.putString("string","hello world");
        //可以直接添加到B
        i.putExtras(b);
        //也可以传递Bundle
        i.putExtra("bundle",b);
        startActivity(i);

    }
});

在B activity获取到数据

Intent i = getIntent();
Bundle data = i.getExtras();
txView = (TextView) findViewById(R.id.TxView);
//若没有值,可以设置默认值
txView.setText( String.format("int = %d string = %s name = %s",data.getInt("int"),data.getString("string"),data.getString("name","default")));

//通过key查找bundle
Bundle data1 = i.getBundleExtra("bundle");


传递自定义类

//传递类时,两种方法,Serializable和Parcelable
    //Serializable直接在初始化时传递就可以(速度慢,使用简单)
    //Parcelable需要实现系统的两个方法(速度快,比较支持,使用复杂)

创建class类User

public class User implements Serializable{private String name;
    private int age;

    public int getAge() {return age;
    }public void setAge(int age) {this.age = age;
    }public String getName() {return name;
    }public void setName(String name) {this.name = name;
    }public User(String name,int age){this.name = name;
        this.age = age;
    }
}

在A activity中

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Override
    public void onClick(View v) {Intent i = new Intent(MainActivity.this,Main2Activity.class);

        i.putExtra("user",new User("123",3));
        startActivity(i);

    }
});

在B activity中获取

User user = (User)i.getSerializableExtra("123");
txView.setText(String.format("%s %d",user.getName(),user.getAge()));


使用Parcelable传递类时

public class User implements Parcelable{private String name;
    private int age;

    protected User(Parcel in) {name = in.readString();
        age = in.readInt();
    }@Override
    public void writeToParcel(Parcel dest, int flags) {//保存数据
        dest.writeString(name);
        dest.writeInt(age);
    }@Override
    public int describeContents() {return 0;
    }
    //创建Creator
    public static final Creator<User> CREATOR = new Creator<User>() {@Override
        public User createFromParcel(Parcel in) {//in.readBundle()使用bundle可以写任意数据
            //修改返回值
            return new User(in.readString(),in.readInt());
        }@Override
        public User[] newArray(int size) {return new User[size];
        }};

    public int getAge() {return age;
    }public void setAge(int age) {this.age = age;
    }public String getName() {return name;
    }public void setName(String name) {this.name = name;
    }//构造方法
    public User(String name,int age){this.name = name;
        this.age = age;
    }
}

获取来自B activity的返回值

在button监听里面添加

Intent i = new Intent(MainActivity.this,Main2Activity.class);

startActivityForResult(i,0);

重写方法

//resultCode为result的返回码,data为Intent返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);
    data.getStringExtra("data");
}




















  相关解决方案