有时候需要activity返回的时候携带数据返回,比如短信群发,添加多个联系人的时候,需要选择listView里面的联系人,同时把联系人的数据返回。
首先需要在主activity里面设置意图,进行跳转,使用startActivityForResult而不是startActivity
Intent intent = new Intent(this, contactActivity.class);
//启动选择联系人的activity
//告诉系统这个activity返回时会返回数据,第二个参数是请求码
startActivityForResult(intent, 10);
跳转到界面以后,封装数据准备携带数据返回
Intent data = new Intent();
//把要传递的数据封装到intent对象
data.putExtra("name", objects[position]);
//data就是intent携带的数据,此activity一旦被销毁data就会传递到此activity中
setResult(0, data); //第一个参数是响应码
//销毁当前的activity
finish();
设置条目监听使用setOnItemClickListener
lv.setOnItemClickListener(new OnItemClickListener(){
//position:用户点击率哪一个条目
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
});
获取到封装的数据返回,执行onActivityResult(int requestCode, int resultCode, Intent data)来反馈获取的数据
当一个应该返回数据的activity被销毁的时候,此方法调用,用于接受数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
}
请求码和响应码,主要是针对请求不同的activity用请求不同的activty,同时一个activity里面有不同的返回数据需要返回码来区分
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<EditText
android:id="@+id/et_name"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="请输入联系人" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请选择联系人"
android:onClick="click1"
/>
</LinearLayout>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="5"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送"
android:onClick="click2"
/>
</LinearLayout>
MainActivity.java
package com.ldw.contact;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click1(View v){
Intent intent = new Intent(this, contactActivity.class);
//启动选择联系人的activity
//告诉系统这个activity返回时会返回数据
startActivityForResult(intent, 10);
}
//当一个应该返回数据的activity被销毁的时候,此方法调用,用于接受数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
//根据请求码判断哪一个activity,接受哪一个activity返回的数据
if(requestCode == 10){
EditText et_name = (EditText) findViewById(R.id.et_name);
//获取到传递过来的参数
et_name.setText(data.getStringExtra("name"));
}
super.onActivityResult(requestCode, resultCode, data);
}
}
activity_contact.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>
</LinearLayout>
item_contact.xml联系人条目
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
contactActivity.java
package com.ldw.contact;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class contactActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
ListView lv = (ListView) findViewById(R.id.lv);
final String[] objects = new String[]{
"A",
"B",
"C",
"D"
};
lv.setAdapter(new ArrayAdapter<String> (this, R.layout.item_contact, R.id.tv, objects));
//对listView设置条目点击侦听,知道什么时候点击率条目,以及点击了哪一个条目
lv.setOnItemClickListener(new OnItemClickListener(){
//position:用户点击率哪一个条目
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent data = new Intent();
//把要传递的数据封装到intent对象
data.putExtra("name", objects[position]);
//data就是intent携带的数据,此activity一旦被销毁data就会传递到此activity中
setResult(0, data);
//销毁当前的activity
finish();
}
});
}
}