[android ui]android 获取上一个activity的返回值

activity A和B

A 获取数据的activity  B返回数据的activity

点击A上的按钮,在A的textview上显示B中的联系人列表选中的数据 用到baseadapter

1:在主配置文件中声明Bactivity 和 注册通讯录的读写权限

[html]  view plain copy
  1. <span style="font-size:18px;"> <!-- 注册通讯录的读写权限 -->  
  2.  <uses-permission android:name="android.permission.READ_CONTACTS" />  
  3.  <uses-permission android:name="android.permission.WRITE_CONTACTS" />  
  4.   
  5. lt;!-- .表示上面 manifest 标签中 package属性的值 -->  
  6.      <activity  
  7.          android:name=".DemoActivity"  
  8.          android:label="选择联系人" >  
  9.      </activity></span>  


2.在A的布局文件中声明2个button和2个edittext 并给button注册点击事件

[html]  view plain copy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <EditText  
  8.         android:id="@+id/textView"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content" />  
  11.   
  12.     <Button  
  13.         android:id="@+id/button1"  
  14.         android:layout_width="fill_parent"  
  15.         android:layout_height="wrap_content"  
  16.         android:onClick="click"  
  17.         android:text="选择一个联系人" />  
  18.   
  19.     <EditText  
  20.         android:id="@+id/textView2"  
  21.         android:layout_width="fill_parent"  
  22.         android:layout_height="wrap_content" />  
  23.   
  24.     <Button  
  25.         android:id="@+id/button2"  
  26.         android:layout_width="fill_parent"  
  27.         android:layout_height="wrap_content"  
  28.         android:onClick="click2"  
  29.         android:text="选择第二个联系人" />  
  30.   
  31. </LinearLayout>  

3:在B的activity布局文件中添加一个listview

[html]  view plain copy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <ListView  
  8.         android:id="@+id/lv"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content" >  
  11.     </ListView>  
  12.   
  13. </LinearLayout>  

4:在A中获取textView,和编写2个按钮的单击事件,应为是要回去上一个activity返回的值,所以再跳转的时候要用startActivityForResult()方法来激活需要返回数据的activity,并重写onActivityResult()方法接收返回的数据

[java]  view plain copy
  1. package com.example.getresultdata;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.Menu;  
  7. import android.view.View;  
  8. import android.widget.TextView;  
  9.   
  10. public class MainActivity extends Activity {  
  11.     private TextView textView;  
  12.     private TextView textView2;  
  13.   
  14.     @Override  
  15.     public void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.main);  
  18.         textView = (TextView) findViewById(R.id.textView);  
  19.         textView2 = (TextView) findViewById(R.id.textView2);  
  20.     }  
  21.   
  22.     /** 
  23.      * 第一个按钮的点击事件 
  24.      *  
  25.      * @param view 
  26.      */  
  27.     public void click(View view) {  
  28.         Intent intent = new Intent(this, DemoActivity.class);  
  29.         // startActivity(intent);  
  30.         startActivityForResult(intent, 1);// 请求码  
  31.                                             // 用于区分请求的数据,如果只有一个请求(按钮),这个code可以为0,可以不考虑他的值  
  32.     }  
  33.   
  34.     /** 
  35.      * 第二个按钮的点击事件 
  36.      *  
  37.      * @param view 
  38.      */  
  39.     public void click2(View view) {  
  40.         Intent intent = new Intent(this, DemoActivity.class);  
  41.         // startActivity(intent);  
  42.         startActivityForResult(intent, 2);// 请求码  
  43.     }  
  44.   
  45.     @Override  
  46.     /** 
  47.      * 当跳转的activity(被激活的activity)使用完毕,销毁的时候调用该方法 
  48.      */  
  49.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  50.         // TODO Auto-generated method stub  
  51.         super.onActivityResult(requestCode, resultCode, data);  
  52.         if (data != null) {  
  53.             String name = data.getStringExtra("name");  
  54.             if (requestCode == 1) {// 因为有2个按钮,所以要区分是触发了那个按钮的单击事件,然后把返回的数据放到对应的EditText中  
  55.                 textView.setText(name);  
  56.             } else if (requestCode == 2) {  
  57.                 textView2.setText(name);  
  58.             }  
  59.         }  
  60.   
  61.     }  
  62.   
  63. }  


5:在B中设置B的布局文件,并回去他的listview,使用baseadapter给listview添加联系人数据

[java]  view plain copy
  1. package com.example.getresultdata;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.content.ContentResolver;  
  8. import android.content.Intent;  
  9. import android.database.Cursor;  
  10. import android.graphics.Color;  
  11. import android.net.Uri;  
  12. import android.os.Bundle;  
  13. import android.provider.ContactsContract;  
  14. import android.view.Menu;  
  15. import android.view.View;  
  16. import android.view.ViewGroup;  
  17. import android.widget.AdapterView;  
  18. import android.widget.AdapterView.OnItemClickListener;  
  19. import android.widget.BaseAdapter;  
  20. import android.widget.ListView;  
  21. import android.widget.TextView;  
  22.   
  23. public class DemoActivity extends Activity {  
  24.     private ListView listView;  
  25.     private List<String> data;  
  26.   
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.demo);  
  31.         listView = (ListView) findViewById(R.id.lv);// 初始化控件  
  32.         data = getAllContacts();// 获取所有的联系人姓名  
  33.         listView.setAdapter(new MyAdapter());  
  34.         listView.setOnItemClickListener(new OnItemClickListener() {  
  35.   
  36.             @Override  
  37.             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
  38.                 TextView textView = (TextView) view;  
  39.                 String name = textView.getText().toString();  
  40.                 Intent intent = new Intent();  
  41.                 intent.putExtra("name", name);// 放入返回值  
  42.                 setResult(0, intent);// 放入回传的值,并添加一个Code,方便区分返回的数据  
  43.                 finish();// 结束当前的activity,等于点击返回按钮  
  44.             }  
  45.   
  46.         });  
  47.     }  
  48.   
  49.     @Override  
  50.     public boolean onCreateOptionsMenu(Menu menu) {  
  51.         getMenuInflater().inflate(R.menu.main, menu);  
  52.         return true;  
  53.     }  
  54.   
  55.     /** 
  56.      * 内部类,为listview添加数据,构成联系人列表 
  57.      *  
  58.      * @author w 
  59.      *  
  60.      */  
  61.     public class MyAdapter extends BaseAdapter {  
  62.   
  63.         @Override  
  64.         public int getCount() {  
  65.             // TODO Auto-generated method stub  
  66.             return data.size();// 返回listview的总长度  
  67.         }  
  68.   
  69.         @Override  
  70.         public Object getItem(int position) {  
  71.             // TODO Auto-generated method stub  
  72.             return position;// 返回当前列表的位置  
  73.         }  
  74.   
  75.         @Override  
  76.         public long getItemId(int position) {  
  77.             // TODO Auto-generated method stub  
  78.             return position;// 返回当前列表位置  
  79.         }  
  80.   
  81.         @Override  
  82.         public View getView(int position, View convertView, ViewGroup parent) {  
  83.             TextView tv = new TextView(DemoActivity.this);  
  84.             tv.setTextSize(25);// 设置显示文本的大小,  
  85.             tv.setTextColor(Color.RED);// 设置显示文本的颜色  
  86.             tv.setText(data.get(position));// 在对应的位置设置联系人数据  
  87.             return tv;  
  88.         }  
  89.   
  90.     }  
  91.   
  92.     /** 
  93.      * 获取所有联系人的姓名 
  94.      *  
  95.      * @return 
  96.      */  
  97.     private List<String> getAllContacts() {  
  98.         List<String> list = new ArrayList<String>();  
  99.         // 或者uri==ContactsContract.Contacts.CONTENT_URI  
  100.         Uri uri = Uri.parse("content://com.android.contacts/contacts");  
  101.         ContentResolver resolver = this.getContentResolver();  
  102.         Cursor cursor = resolver.query(uri, nullnullnullnull);  
  103.         while (cursor.moveToNext()) {  
  104.             String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));  
  105.             list.add(name);  
  106.         }  
  107.         cursor.close();  
  108.         return list;  
  109.     }  
  110. }  


注意 在A中的startActivityForResult中的requestCode 和B中的setResult中的resultCode 两者的code不是对应的,A中的code用区分请求空间,B中的Code是用以区分返回值


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值