|
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;
@Override www.jb51.net 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是用以区分返回值
|