您的位置:首页 > 其它

使用ViewStub和自定义ListView完成的小功能

2011-12-01 14:57 645 查看
该功能很简单,自己花了一天来完成并测试它,其中涉及到了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) 方法接收处理数据

到此,这么一个小功能就完成了,大家有啥更好的处理方法可以提出一起讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐