入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Android 可以多选的分组联系人列表

创建时间:2016-01-22 投稿人: 浏览次数:2012

只是作为自己的一个笔记
进入选择联系人页面的入口 以及返回选择结果 展示选择联系人AutolinefeedView使用的是网上找得(点击联系人删除)

        add_people.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // 选择联系人
                Intent intent = new Intent(SendXiaoGaoActivity.this,
                        SelectPeopleActivity.class);
                intent.putExtra("userlist", userlist);
                startActivityForResult(intent, 20);
            }
        });

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode == Activity.RESULT_OK) {
            switch (requestCode) {
            case 20:
                userlist = new ArrayList<String>();
                autolinefeedView1.removeAllViews();
                ArrayList<Map<String, Object>> result = (ArrayList<Map<String, Object>>) data
                        .getExtras().get("result");// 得到新Activity 关闭后返回的数据
                for (int i = 0; i < result.size(); i++) {
                    userlist.add(result.get(i).get("peopleid").toString());
                    final Button bt = new Button(context);
                    bt.setText(result.get(i).get("name").toString());
                    bt.setTag(result.get(i).get("peopleid").toString());
                    bt.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View arg0) {
                            autolinefeedView1.removeView(bt);
                            userlist.remove(bt.getTag());
                        }
                    });
                    autolinefeedView1.addView(bt);
                }
                break;
            default:
                break;
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

选择联系人列表页面,两次网络请求,一次获得部门列表(包含了部门人数,为后面的部门全选做准备),一次获得人员列表,处理数据,做成部门人员的完整列表。

package com.ytint.wloaa.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import cn.jpush.android.api.JPushInterface;

import com.ab.activity.AbActivity;
import com.ab.http.AbHttpUtil;
import com.ab.http.AbStringHttpResponseListener;
import com.ab.view.ioc.AbIocView;
import com.ab.view.titlebar.AbTitleBar;
import com.ytint.wloaa.R;
import com.ytint.wloaa.adapter.SelectPeopleAdapter;
import com.ytint.wloaa.adapter.SelectPeopleAdapter.ViewHolder;
import com.ytint.wloaa.app.MyApplication;
import com.ytint.wloaa.bean.Department;
import com.ytint.wloaa.bean.DepartmentList;
import com.ytint.wloaa.bean.People;
import com.ytint.wloaa.bean.PeopleList;
import com.ytint.wloaa.bean.URLs;
import com.ytint.wloaa.widget.TitleBar;

/**
 * 选择联系人
 * 
 * @author wlj
 * 
 */
public class SelectPeopleActivity extends AbActivity {

    String TAG = "SelectPeopleActivity";
    private MyApplication application;
    Context context = null;
    private String loginKey;
    String host;
    @AbIocView(id = R.id.listView_people_list)
    ListView listView_people_list;
    public static Map<Integer, Boolean> isSelected;
    private List<People> peoples;
    private List<Department> deptartments;
    private SelectPeopleAdapter adapter;
    private List<Map<String, Object>> mData;
    private List<String> userlist=new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        application = (MyApplication) this.getApplication();
        host = URLs.HTTP + application.getProperty("HOST") + ":"
                + application.getProperty("PORT");
        Intent intent = getIntent();
        userlist=intent.getStringArrayListExtra("userlist");
        setAbContentView(R.layout.layout_select_people);
        context = SelectPeopleActivity.this;
        loginKey = application.getProperty("loginKey");
        AbTitleBar mAbTitleBar = this.getTitleBar();
        mAbTitleBar.setVisibility(View.GONE);
        final TitleBar titleBar = (TitleBar) findViewById(R.id.title_bar);
        titleBar.setLeftImageResource(R.drawable.back_green);
        titleBar.setLeftText("返回");
        titleBar.setLeftTextColor(Color.WHITE);
        titleBar.setLeftClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        titleBar.setTitle("选择联系人");
        titleBar.setTitleColor(Color.WHITE);
        titleBar.setDividerColor(Color.GRAY);
        titleBar.setActionTextColor(Color.WHITE);
        titleBar.addAction(new TitleBar.TextAction("完成") {
            @Override
            public void performAction(View view) {
                //数据是使用Intent返回
                Intent intent = new Intent();
                ArrayList<Map<String, Object>> datas=new ArrayList<Map<String, Object>>();
                //获得选择的人员列表
                for (int i = 0; i < isSelected.size(); i++) {
                    if (isSelected.get(i)) {
                        if (!mData.get(i).get("peopleid").toString().equals("0")) {
                            datas.add(mData.get(i));
                        }
                    }
                }
                //把返回数据存入Intent
                intent.putExtra("result", datas);
                //设置返回数据
                SelectPeopleActivity.this.setResult(RESULT_OK, intent);
                //关闭Activity
                SelectPeopleActivity.this.finish();
            }
        });
        loadDept();

    }

    @SuppressLint("NewApi")
    private void loadDept() {
        final AbHttpUtil mAbHttpUtil = AbHttpUtil.getInstance(this);
        if (!application.isNetworkConnected()) {
            showToast("请检查网络连接");
            return;
        }
        String host=URLs.HTTP+application.getProperty("HOST")+":"+application.getProperty("PORT");
        String url=host+URLs.DEPLIST+"?user_id="+loginKey;
        Log.e(TAG, url);
        mAbHttpUtil.get(url,
             new AbStringHttpResponseListener() {
            // 获取数据成功会调用这里
            @Override
            public void onSuccess(int statusCode, String content) {
                try {
                    DepartmentList cList = DepartmentList.parseJson(content);
                    if (cList.code == 200) {
                        deptartments = cList.getInfo();
                        loadPeoples();
                    } else {
                        showToast(cList.msg);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    showToast("数据解析失败");
                }
            };

            // 开始执行前
            @Override
            public void onStart() {
                // 显示进度框
                showProgressDialog();
            }

            @Override
            public void onFailure(int statusCode, String content,
                    Throwable error) {
                showToast("网络连接失败!");
            }

            // 完成后调用,失败,成功
            @Override
            public void onFinish() {
                // 移除进度框
                removeProgressDialog();
            };

        });
    }
    @SuppressLint("NewApi")
    private void loadPeoples() {

        final AbHttpUtil mAbHttpUtil = AbHttpUtil.getInstance(this);
        if (!application.isNetworkConnected()) {
            showToast("请检查网络连接");
            return;
        }
        String host=URLs.HTTP+application.getProperty("HOST")+":"+application.getProperty("PORT");
        mAbHttpUtil.get(host+URLs.USERLIST+"?user_id=0" ,
                new AbStringHttpResponseListener() {
            // 获取数据成功会调用这里
            @Override
            public void onSuccess(int statusCode, String content) {
                try {
                    PeopleList cList = PeopleList.parseJson(content);
                    if (cList.code == 200) {
                        peoples = cList.getInfo();
                        for (int i = 0; i < peoples.size(); i++) {
                            if (loginKey.equals(peoples.get(i).id+"")) {
                                peoples.remove(i);
                            }
                        }
                        mData = new ArrayList<Map<String, Object>>();
                        for (Department department : deptartments) {
                            Map<String, Object> map = new HashMap<String, Object>();
                            map.put("name", department.name);
                            map.put("isdept", "1");
                            map.put("dept_id", department.id);
                            map.put("peopleid", 0);
                            map.put("user_num", department.user_num);
                            mData.add(map);
                            for (People people : peoples) {
                                if (people.department_id.trim().equals(department.id.trim())) {
                                    map = new HashMap<String, Object>();
                                    map.put("name", people.name);
                                    map.put("isdept", "2");
                                    map.put("dept_id",people.department_id);
                                    map.put("peopleid",people.id);
                                    map.put("user_num",0);
                                    mData.add(map);
                                }
                            }
                        }
                        // 这儿定义isSelected这个map是记录每个listitem的状态,初始状态全部为false。
                        isSelected = new HashMap<Integer, Boolean>();
                        for (int i = 0; i < mData.size(); i++) {
                            if (userlist.contains(mData.get(i).get("peopleid").toString())) {
                                isSelected.put(i, true);
                            }else{
                                isSelected.put(i, false);
                            }
                        }
                        adapter=new SelectPeopleAdapter(context,mData,isSelected);  
                        listView_people_list.setAdapter(adapter);  
                        listView_people_list.setItemsCanFocus(false);  
                        listView_people_list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);  

                        listView_people_list.setOnItemClickListener(new OnItemClickListener(){  
                            @Override  
                            public void onItemClick(AdapterView<?> parent, View view,  
                                    int position, long id) {  
                                ViewHolder vHollder = (ViewHolder) view.getTag();  
                                //在每次获取点击的item时将对于的checkbox状态改变,同时修改map的值。  
                                vHollder.cBox.toggle();  
                                SelectPeopleAdapter.isSelected.put(position, vHollder.cBox.isChecked());  
                                //判断是否是部门,选择部门下的用户
                                if (vHollder.isdept.equals("1")) {
                                    for (int i = 1; i <= vHollder.user_num; i++) {
                                        SelectPeopleAdapter.isSelected.put(position+i, vHollder.cBox.isChecked());
                                    }
                                    // 通知listView刷新  
                                    adapter.notifyDataSetChanged();  
                                }
                            }  
                        });
                    } else {
                        showToast(cList.msg);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    showToast("数据解析失败");
                }
            };

            // 开始执行前
            @Override
            public void onStart() {
                // 显示进度框
                showProgressDialog();
            }

            @Override
            public void onFailure(int statusCode, String content,
                    Throwable error) {
                showToast("网络连接失败!");
            }

            // 完成后调用,失败,成功
            @Override
            public void onFinish() {
                // 移除进度框
                removeProgressDialog();
            };

        });
    }
}
package com.ytint.wloaa.adapter;

import java.util.List;
import java.util.Map;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

import com.ytint.wloaa.R;

public class SelectPeopleAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private List<Map<String, Object>> mData;
    public static Map<Integer, Boolean> isSelected;

    public SelectPeopleAdapter(Context context, List<Map<String, Object>> mDatas,Map<Integer, Boolean> isSelecteds) {
        mInflater = LayoutInflater.from(context);
        init(mDatas,isSelecteds);
    }

    // 初始化
    private void init(List<Map<String, Object>> mDatas,Map<Integer, Boolean> isSelecteds) {
        mData=mDatas;
        isSelected=isSelecteds;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return mData.get(position).get("name");
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        // convertView为null的时候初始化convertView。
//      if (convertView == null) {
            holder = new ViewHolder();
            if (mData.get(position).get("isdept").toString().equals("1")) {
                convertView = mInflater.inflate(
                        R.layout.addpeople_list_item_tag, null);
                holder.title = (TextView) convertView
                        .findViewById(R.id.addpeople_list_item_text);
                holder.cBox = (CheckBox) convertView
                        .findViewById(R.id.addpeople_list_item_check);
            } else {
                convertView = mInflater.inflate(R.layout.addpeople_list_item,
                        null);
                holder.title = (TextView) convertView
                        .findViewById(R.id.people_one);
                holder.cBox = (CheckBox) convertView
                        .findViewById(R.id.people_check);
            }
            convertView.setTag(holder);
//      } else {
//          holder = (ViewHolder) convertView.getTag();
//      }
        holder.title.setText(mData.get(position).get("name").toString());
        holder.cBox.setChecked(isSelected.get(position));
        holder.dept_id=mData.get(position).get("dept_id").toString();
        holder.isdept=mData.get(position).get("isdept").toString();
        holder.peopleid=mData.get(position).get("peopleid").toString();
        holder.user_num=Integer.parseInt(mData.get(position).get("user_num").toString());
        return convertView;
    }

    public final class ViewHolder {
        public String dept_id=new String();
        public String isdept=new String();
        public String peopleid=new String();
        public int user_num;
        public TextView title;
        public CheckBox cBox;
    }
}

addpeople_list_item_tag

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/darkgrey"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:paddingLeft="10dp" >

    <TextView
        android:id="@+id/addpeople_list_item_text"
        android:layout_width="wrap_content"
        android:layout_height="35dip"
        android:layout_weight="0.8"
        android:gravity="center_vertical"
        android:text="金融考试"
        android:textColor="#ffffff"
        android:textSize="17sp" />

    <CheckBox
        android:id="@+id/addpeople_list_item_check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.2"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false" />

</LinearLayout>

addpeople_list_item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="5dip" >

    <TextView
        android:id="@+id/people_one"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_weight="1"
        android:text="TextView"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <CheckBox
        android:id="@+id/people_check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:focusable="false"  
        android:focusableInTouchMode="false"  
        android:clickable="false"   />

</LinearLayout>

layout_select_people

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical" >

    <com.ytint.wloaa.widget.TitleBar
        android:id="@+id/title_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/titlebar" >
    </com.ytint.wloaa.widget.TitleBar>

    <ListView
        android:id="@+id/listView_people_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像