有时候需要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();设置条目监听使用setOnItemClickListenerlv.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.javapackage 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(); } }); }}
新闻热点
疑难解答