一、绑定事件的方法:
1、方法一:UI组件事件属性调用
main.xml:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="forWard"
android:text="跳转" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
Main.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**接收调用Input.java中startActivity方法传递过来的数据*/
EditText editText2=(EditText)this.findViewById(R.id.editText2);
Intent intent = getIntent();
String text= intent.getStringExtra(Input.EXTRA_MESSAGE);
if(text!= null){
editText2.setText(text);
}
}
/**UI组件事件属性调用*/
public void forWard(View view){
Intent intent = new Intent(Main.this,Input.class);
startActivity(intent);//定义好的intent对象启动一个Activity 跳向Input.java
}
input.xml:
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="请输入"
android:inputType="textPersonName" >
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="返回数据"
android:onClick="sendMessage"
/>
Input.java:
static String EXTRA_MESSAGE="text";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//将Activity和Views绑定,实现用户交互
setContentView(R.layout.input);
}
/**UI组件事件属性调用:startActivity*/
public void sendMessage(View view) {
// 获取用户在该页面输入的值,传送给Main.java
Intent intent = new Intent(this, Main.class);//MainActivity向DisplayMessageActivity传送
EditText editText = (EditText) findViewById(R.id.editText1);
String text = editText.getText().toString();
intent.putExtra("text", text);//向intent中存放名为EXTRA_MESSAGE的数据
startActivity(intent);
}
2、方法二:后端代码向UI组件动态绑定事件
Main.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**后端向UI组件动态绑定事件*/
Button button =(Button)this.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Main.this,Input.class);
startActivity(intent);//定义好的intent对象启动一个Activity
}
});
/**接收调用startActivity方法,其他Activity传递过来的数据*/
EditText editText2=(EditText)this.findViewById(R.id.editText2);
Intent intent = getIntent();
String text = intent.getStringExtra(Input.EXTRA_MESSAGE);
if(text != null){
editText2.setText(text);
}
}
Input.java:
static String EXTRA_MESSAGE="text";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.input);
/**后端向UI组件动态绑定事件*/
Button button =(Button)this.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
EditText editText =(EditText)findViewById(R.id.editText1);
String text = editText.getText().toString();
/**Main中startActivity跳转过来,向Intent中放数据传递给Main.java*/
// 获取用户在该页面输入的值,传送给另外一个页面
Intent intent = new Intent(Input.this, Main.class);//MainActivity向DisplayMessageActivity传送
intent.putExtra("text", text);//向intent中存放名为EXTRA_MESSAGE的数据
startActivity(intent);
}
});
}
二、startActivity、startActivityForResult区别
Main.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**后端向UI组件动态绑定事件*/
Button button =(Button)this.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Main.this,Input.class);
//定义好的intent对象启动一个带返回的Activity(用startActivityForResult返回时不会再调用onCreate方法)
startActivityForResult(intent, 0);
}
});
}
/**接收调用startActivityForResult方法返回的数据*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//requestCode:用来标识请求对象,和启动Activity时用的startActivityForResult(intent, 0)对应,0即requestCode
if(requestCode==0){
if(resultCode == Activity.RESULT_OK){
SharedPreferences preferences = getSharedPreferences("Text", 0);通过Text标签获取SharedPreferences对象
EditText editText2=(EditText)this.findViewById(R.id.editText2);
editText2.setText(preferences.getString("text", null));把传递过来的数据从text对象中取出
}
}
}
Input.java:
static String EXTRA_MESSAGE="text";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.input);
/**后端向UI组件动态绑定事件*/
Button button =(Button)this.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
EditText editText =(EditText)findViewById(R.id.editText1);
String text = editText.getText().toString();
/**Main中startActivityForResult跳转过来,向SharedPreferences中放数据传递给Main.java*/
//SharedPreferences对象:多个Activity(同一包中)共享数据的方式
//通过一个自定义的Text标签获得和文本相关的那个SharedPreferences对象
SharedPreferences preferences = getSharedPreferences("Text", 0);
SharedPreferences.Editor edites = preferences.edit();
edites.putString("text", text);给它赋予一个"text"对象值为当前文本框中输入的文本
if(edites.commit()){
setResult(Activity.RESULT_OK);设置当前Activity执行结果为RESULT_OK
}
finish();关闭当前的Activity
}
});
}
注意:
UI组件事件属性调用,比较startActivity和startActivityForResult的区别,只是把动态绑定中的相应代码拿出放到一个方法中即可