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

来源:互联网 发布:环境监测数据空虚作假 编辑:程序博客网 时间:2024/05/22 14:51

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

到此,这么一个小功能就完成了,大家有啥更好的处理方法可以提出一起讨论。


原创粉丝点击