该功能很简单,自己花了一天来完成并测试它,其中涉及到了ViewStub和自定义ListView,具有全选、选中、回显等功能。
A.效果图
1.实现收件人该行效果.PNG
2.点击+后效果(此处自定义listView).PNG
3.选中、点击确定后回显效果.PNG
B. 功能实现
1.图一效果实现
1.1布局
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ViewStub android:id="@+id/recipients_editor_stub"
android:layout="@layout/recipients_editor" //引用另外一个layout
android:layout_width="260dip"
android:layout_height="wrap_content" />
<ImageButton
android:id="@+id/addContacts_cc"
android:src="@drawable/create_contact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>
recipients_editor.xml
<com.android.xxxxx.activity.xxxxxx
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cc" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorSecondaryInverse"
android:inputType="textEmailAddress|textMultiLine"
android:imeOptions="actionNext"
android:hint="@string/message_compose_cc_hint"
android:visibility="gone" />
1.2简要代码
//获取并显示ViewStub
ViewStub mView = (ViewStub) findViewById(R.id.recipients_editor_stub);
if (mView != null) {
mView.inflate();
} else {
mView.setVisibility(View.VISIBLE);
}
//任意取recipients_editor.xml中的元素了
ImageButton功能就是点击跳转Activity
2.图二效果实现
2.1 布局
contacts_list_item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="5dip" android:paddingLeft="12dip"
android:paddingRight="12dip">
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/contact_item"
android:textSize="20dip" android:paddingTop="1dip"
android:layout_marginLeft="1dip">
</TextView>
<CheckBox android:id="@+id/contact_item_cb" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_alignParentRight="true"
android:focusable="false">
</CheckBox>
</RelativeLayout>
2.2 简要代码
2.2.1 ListView适配器
public class ContactsItemAdaapter extends BaseAdapter {
private LayoutInflater mInflater;
private List<String> listData;
public static Map<Integer,Boolean> selectMap = new HashMap<Integer, Boolean>();
public class ViewHolder {
public TextView title;
public CheckBox checkBox;
}
public ContactsItemAdaapter(Context context, List<String> listData) {
this.mInflater = LayoutInflater.from(context);
this.listData = listData;
for (int i = 0; i < listData.size(); i++) {
selectMap.put(i, false);
}
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.contacts_list_item, null);
final View view = convertView;
holder.title = (TextView) convertView.findViewById(R.id.contact_item);
holder.checkBox = (CheckBox) convertView.findViewById(R.id.contact_item_cb);
holder.checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
selectMap.put(position, !selectMap.get(position));
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(listData.get(position));
if (selectMap.get(position) != null) {
holder.checkBox.setChecked(selectMap.get(position));
}else{
selectMap.put(position,false);
holder.checkBox.setChecked(false);
}
return convertView;
}
}
2.2.2 跳转Activity
public class AddContactsActivity extends Activity implements
android.view.View.OnClickListener {
private final int addContactsActivityCode = 99;
private ListView contactsList;
private ContactsItemAdaapter adapter ;
private Button buttonYes;
private Button buttonNo;
private CheckBox allCheck;
private List<String> dataList;
private ArrayList<String> nameList;
private List data;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts_list);
data = new ArrayList<Map<String, Object>>();
initView();
initListView();
}
public void initListView(){
adapter = new ContactsItemAdaapter(this,dataList);
contactsList.setAdapter(adapter);
contactsList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int index,
long arg3) {
ViewHolder holder = (ViewHolder) view.getTag();
holder.checkBox.setChecked(!holder.checkBox.isChecked());
adapter.selectMap.put(index, !holder.checkBox.isChecked());
}
});
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
int index = adapter.getCount();
if (arg0 == allCheck) {
for(int i=0;i<index;i++){
adapter.selectMap.put(i, allCheck.isChecked());
}
adapter.notifyDataSetChanged();
}
if (arg0 == buttonYes) {
String sendData = "";
for (int i = 0; i < index; i++) {
if (adapter.selectMap.get(i)) {
sendData += dataList.get(i).toString()+",";
}
}
for(int i=0;i<index;i++){
adapter.selectMap.put(i,false);
}
Intent intent = new Intent(this,MessageCompose.class);
intent.putExtra("send", sendData);
setResult(addContactsActivityCode, intent); //返回数据显示
this.finish();
}
if (arg0 == buttonNo) {
for(int i=0;i<index;i++){
adapter.selectMap.put(i,false);
}
this.finish();
}
}
public void getContactsList(Context context) {
List<Map<String, Object>> contacts = new ArrayList<Map<String, Object>>();
ContentResolver cr = context.getContentResolver();
Cursor mCursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, ContactsContract.Contacts.SORT_KEY_PRIMARY); //获取数据存入集合
Cursor emailCursor;
if (mCursor != null) {
if (mCursor.getCount() > 0) {
mCursor.moveToFirst();
do {
String name = mCursor.getString(mCursor
.getColumnIndex(PhoneLookup.DISPLAY_NAME));
String contactsId = mCursor.getString(mCursor
.getColumnIndex(ContactsContract.Contacts._ID));
emailCursor = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " =" + contactsId, null, null);
if(emailCursor!=null){
emailCursor.moveToFirst();
do {
if (emailCursor.getCount() > 0) {
nameList.add(name);
dataList.add(name);
}
} while (emailCursor.moveToNext());
emailCursor.close();
}
} while (mCursor.moveToNext());
mCursor.close();
}
}
}
public void initView() {
allCheck = (CheckBox) findViewById(R.id.all_check);
allCheck.setOnClickListener(this);
buttonYes = (Button) findViewById(R.id.yes);
buttonYes.setOnClickListener(this);
buttonNo = (Button) findViewById(R.id.no);
buttonNo.setOnClickListener(this);
dataList = new ArrayList<String>();
nameList = new ArrayList<String>();
contactsList = (ListView) findViewById(R.id.contactsList);
getContactsList(this);
}
}
3 图三效果
采用 onActivityResult(int requestCode, int resultCode, Intent data) 方法接收处理数据
到此,这么一个小功能就完成了,大家有啥更好的处理方法可以提出一起讨论。