Android 可以多選的分組聯繫人列表

只是作爲自己的一個筆記
進入選擇聯繫人頁面的入口 以及返回選擇結果 展示選擇聯繫人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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章