activity A和B

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

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

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

[html]
<span style="font-size:18px;"> <!-- 注册通讯录的读写权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

lt;!-- .表示上面 manifest 标签中 package属性的值 -->
<activity
android:name=".DemoActivity"
android:label="选择联系人" >
</activity></span>

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

[html]
<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"
android:orientation="vertical" >

<EditText
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="click"
android:text="选择一个联系人" />

<EditText
android:id="@+id/textView2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="click2"
android:text="选择第二个联系人" />

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

[html]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ListView
android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>

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

[java]
package com.example.getresultdata;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
private TextView textView;
private TextView textView2;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.textView);
textView2 = (TextView) findViewById(R.id.textView2);
}

/**
* 第一个按钮的点击事件
*
* @param view
*/
public void click(View view) {
Intent intent = new Intent(this, DemoActivity.class);
// startActivity(intent);
startActivityForResult(intent, 1);// 请求码
// 用于区分请求的数据,如果只有一个请求(按钮),这个code可以为0,可以不考虑他的值
}

/**
* 第二个按钮的点击事件
*
* @param view
*/
public void click2(View view) {
Intent intent = new Intent(this, DemoActivity.class);
// startActivity(intent);
startActivityForResult(intent, 2);// 请求码
}

@Override
/**
* 当跳转的activity(被激活的activity)使用完毕,销毁的时候调用该方法
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
String name = data.getStringExtra("name");
if (requestCode == 1) {// 因为有2个按钮,所以要区分是触发了那个按钮的单击事件,然后把返回的数据放到对应的EditText中
textView.setText(name);
} else if (requestCode == 2) {
textView2.setText(name);
}
}

}

}

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

[java]
package com.example.getresultdata;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class DemoActivity extends Activity {
private ListView listView;
private List<String> data;

@Overridewww.2cto.com
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo);
listView = (ListView) findViewById(R.id.lv);// 初始化控件
data = getAllContacts();// 获取所有的联系人姓名
listView.setAdapter(new MyAdapter());
listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView textView = (TextView) view;
String name = textView.getText().toString();
Intent intent = new Intent();
intent.putExtra("name", name);// 放入返回值
setResult(0, intent);// 放入回传的值,并添加一个Code,方便区分返回的数据
finish();// 结束当前的activity,等于点击返回按钮
}

});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

/**
* 内部类,为listview添加数据,构成联系人列表
*
* @author w
*
*/
public class MyAdapter extends BaseAdapter {

@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();// 返回listview的总长度
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;// 返回当前列表的位置
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;// 返回当前列表位置
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(DemoActivity.this);
tv.setTextSize(25);// 设置显示文本的大小,
tv.setTextColor(Color.RED);// 设置显示文本的颜色
tv.setText(data.get(position));// 在对应的位置设置联系人数据
return tv;
}

}

/**
* 获取所有联系人的姓名
*
* @return
*/
private List<String> getAllContacts() {
List<String> list = new ArrayList<String>();
// 或者uri==ContactsContract.Contacts.CONTENT_URI
Uri uri = Uri.parse("content://com.android.contacts/contacts");
ContentResolver resolver = this.getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
list.add(name);
}
cursor.close();
return list;
}
}

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

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. tabHost研究二 ,android应用中,大部分的软件都会采用把按钮放在底
  5. Android(安卓)Service生命周期及用法!
  6. Flutter插件混编的各种奇葩问题以及Flutter与Native数据交互,Meth
  7. Android(安卓)ListView中复杂数据流的高效渲染
  8. Android活动文件夹
  9. 说说 Android(安卓)中的 SQLite 数据库

随机推荐

  1. AndroidStudio 报 Error:Execution faile
  2. Android studio 中NDK的配置和JNI实现的
  3. Android 原生获取地理位置
  4. Android多媒体开发(5)————利用Android
  5. 联发科智能机战略转投Android 加速其规范
  6. android之单选框
  7. 1、What Makes an Android Application?
  8. 谁说Android的动画不廉价(二)之转场动画
  9. Android 4.0 x86安装教程 附带联网参数详
  10. 〖Linux〗穿越城墙之后,直接连接国内网站