36.activity返回携带数据

有时候需要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();
				
			}

        });
	}

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值