listview多选方法

package com.wiiy.jtb.manager;

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

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


import com.wiiy.jtb.R;
import com.wiiy.jtb.common.InternetThread;
import com.wiiy.jtb.common.Param;
import com.wiiy.jtb.entity.PhoneProductType;
import com.wiiy.jtb.entity.ViewHolder;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class ManagerSalesmanlistActivity extends Activity{
    private static ArrayList<PhoneProductType> userlist;        //业务员
    
    private static ArrayList<HashMap<String, Object>> alesmanstate;//加是否选中
    private ArrayList<HashMap<String, Object>> salesmanreturns;    //加是否选中
    
    private Button confirm;                                        //确定
    private Button cancel;                                        //取消
    private ListView listview;                                    //布局
    MyAdapter adapter;                    
    ViewHolder holder;
    private ArrayList<HashMap<String,Object>> salesmanlist;            //获得保存选中的业务员
    private CheckBox checkall;                                    //全选
    private boolean checkallboolean;                            //保存全选状态
    ProgressDialog progressDialog;
    private MessageHandler messageHandler;        
    private String articleid;
    private LinearLayout add_name;                                //隐藏全选
    private int count=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //不显示标题
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        setContentView(R.layout.productdialoglist);
        Looper looper = Looper.myLooper();
        messageHandler = new MessageHandler(looper);
        salesmanreturns = new ArrayList<HashMap<String,Object>>();
        salesmanlist = (ArrayList<HashMap<String,Object>>) getIntent().getSerializableExtra("salesmanlist");
        checkallboolean  = getIntent().getBooleanExtra("checkall",false);
        articleid = getIntent().getStringExtra("articleid");
        
        add_name = (LinearLayout) findViewById(R.id.add_name);
        add_name.setVisibility(View.VISIBLE);
        //全选
        checkall = (CheckBox) findViewById(R.id.checkall);
        checkall.setChecked(checkallboolean);
        checkall.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                count=0;
                if(checkall.isChecked()){
                    for (int i = 0; i < userlist.size(); i++) {
                        count+=1;
                        MyAdapter.isSelected.put(i, true);
                        HashMap<String, Object> map = new HashMap<String, Object>();
                        map.put("item_tv", userlist.get(i));
                        map.put("item_cb", true);
                        alesmanstate.set(i, map);
                    }
                    adapter.notifyDataSetChanged();
                }else{
                    for (int i = 0; i < userlist.size(); i++) {
                        MyAdapter.isSelected.put(i, false);
                        HashMap<String, Object> map = new HashMap<String, Object>();
                        map.put("item_tv", userlist.get(i));
                        map.put("item_cb", false);
                        alesmanstate.set(i, map);
                    }
                    adapter.notifyDataSetChanged();
                }
            }
        });
        
    
        
        listview = (ListView) findViewById(R.id.listview);
        confirm = (Button) findViewById(R.id.confirm);
        confirm.setOnClickListener(new OnClickListener() {        
            public void onClick(View v) {
                if(userlist.size()==0){
                    finish();
                }else{
                    //获得循环listview里的ckeckBox有几个被选中
                    for(int i = 0; i<listview.getCount(); i++){
                        LayoutInflater inflater = LayoutInflater.from(ManagerSalesmanlistActivity.this);;
                        View view = inflater.inflate(R.layout.productdialoglist_item, null);
                        ViewGroup group = null;
                        LinearLayout sn = (LinearLayout) adapter.getView(i, view, group);
                        LinearLayout checd = (LinearLayout) sn.getChildAt(0);
                        LinearLayout checds = (LinearLayout) checd.getChildAt(1);
                        CheckBox checkBox = (CheckBox) checds.getChildAt(0);// checkBox在LinearLayout的第二个位置(从gridview布局文件得知),所以用1(位置从0开始)
                          if(checkBox!=null){
                              if (checkBox.isChecked()){
                                  salesmanreturns.add((HashMap<String, Object>) adapter.getItem(i));
                              }
                          }
                    }
                    Intent intent=new Intent();
                    intent.putExtra("salesmanreturn", salesmanreturns);
                    intent.putExtra("checkall", checkall.isChecked());
                        setResult(RESULT_OK, intent); //intent为A传来的带有Bundle的intent,当然也可以自己定义新的Bundle
                    ManagerSalesmanlistActivity.this.finish();
                }
                    
            }
        });
        cancel = (Button) findViewById(R.id.cancel);
        cancel.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                finish();
            }
        });
        
        
        List<NameValuePair> param = new ArrayList<NameValuePair>();
        param.add(new BasicNameValuePair("companyCode", Param.companyCode));
        param.add(new BasicNameValuePair("userId", Param.userId));
        new InternetThread(param, "leave_queryUnderUser.action", messageHandler, 1).start();
        progressDialog= new ProgressDialog(this);  
        progressDialog.setTitle("提示框");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);    
        progressDialog.setIcon(R.drawable.icogth);  
        progressDialog.setMessage("数据加载中...");  
        progressDialog.setCancelable(false);
        progressDialog.show();
    }
    
    public void showCheckBoxListView() {
        alesmanstate = new ArrayList<HashMap<String, Object>>();
        for (int i = 0; i < userlist.size(); i++) {
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("item_tv", userlist.get(i));
            map.put("item_cb", false);
            alesmanstate.add(map);

            adapter = new MyAdapter(this,alesmanstate, R.layout.productdialoglist_item,
                    new String[] { "item_tv", "item_cb" }, new int[] {
                            R.id.productname, R.id.checkBox1 });
            listview.setAdapter(adapter);
            
            listview.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> arg0, View view,
                        int position, long arg3) {
                    ListView listview = (ListView) arg0;
                    HashMap<String, Object> product1 = (HashMap<String, Object>) listview.getItemAtPosition(position);
                    PhoneProductType product =   (PhoneProductType) product1.get("item_tv");
                    holder = (ViewHolder) view.getTag();
                    if(product.getId()!=null&&!product.getId().equals("0")){
                        holder.cb.toggle();// 在每次获取点击的item时改变checkbox的状态
                        MyAdapter.isSelected.put(position, holder.cb.isChecked()); // 同时修改map的值保存状态
                        if(holder.cb.isChecked()){
                            if(userlist.size()==(count+=1)){
                                checkall.setChecked(true);
                            }
                        }else{
                            if(userlist.size()>(count-=1)){
                                checkall.setChecked(false);
                            }
                        }
                    }
                
                }

            });
        }
    }
    //为listview自定义适配器内部类
        public static class MyAdapter extends BaseAdapter {
            public static HashMap<Integer, Boolean> isSelected;
            private Context context = null;
            private LayoutInflater inflater = null;
            private List<HashMap<String, Object>> list = null;
            private String keyString[] = null;
            private PhoneProductType itemString = null; // 记录每个item中textview的值
            private int idValue[] = null;// id值

            public MyAdapter(Context context, List<HashMap<String, Object>> list,
                    int resource, String[] from, int[] to) {
                this.context = context;
                this.list = list;
                keyString = new String[from.length];
                idValue = new int[to.length];
                System.arraycopy(from, 0, keyString, 0, from.length);
                System.arraycopy(to, 0, idValue, 0, to.length);
                inflater = LayoutInflater.from(this.context);
                init();
            }

            // 初始化 设置所有checkbox都为未选择
            public void init() {
                isSelected = new HashMap<Integer, Boolean>();
            
                for (int i = 0; i < list.size(); i++) {
                    isSelected.put(i, false);
                }
            
            }

            public int getCount() {
                return list.size();
            }

            public Object getItem(int arg0) {
                return list.get(arg0);
            }
            
            public long getItemId(int arg0) {
                return 0;
            }

            public View getView(int position, View view, ViewGroup arg2) {
                ViewHolder holder = null;
                if (holder == null) {
                    holder = new ViewHolder();
                    if (view == null) {
                        view = inflater.inflate(R.layout.productdialoglist_item, null);
                    }
                    holder.tv = (TextView) view.findViewById(R.id.productname);
                    holder.cb = (CheckBox) view.findViewById(R.id.checkBox1);
                    view.setTag(holder);
                } else {
                    holder = (ViewHolder) view.getTag();
                }
                
                HashMap<String, Object> maps = new HashMap<String, Object>();
                maps.put("item_tv", userlist.get(position));
                maps.put("item_cb", isSelected.get(position));
                list.set(position, maps);
                
                HashMap<String, Object> map = list.get(position);
                if (map != null) {
                    itemString =   (PhoneProductType) map.get("item_tv");
                    holder.tv.setText(itemString.getN());
                    boolean ischeck = (Boolean) map.get("item_cb");
                    holder.cb.setChecked(ischeck);
                }
                
                return view;
            }

        }
    
        
        class MessageHandler extends Handler {
            public MessageHandler(Looper looper) {
                super(looper);
            }

            @Override
            public void handleMessage(Message msg) {
                String message = "";
                if(msg.arg2==1){
                    if(msg.arg1==1){
                        JSONObject jsonObject = (JSONObject) msg.obj;
                            try {
                                if(jsonObject.getBoolean("success")){
                                    message = "数据加载成功!";
                                    JSONArray aray = jsonObject.getJSONArray("userList");

                                    userlist = new ArrayList<PhoneProductType>();
                                    for(int i=0; i<aray.length(); i++){
                                        PhoneProductType user = new PhoneProductType();
                                        JSONArray obj = aray.getJSONArray(i);
                                        for(int j=0; j<obj.length(); j++){
                                            user.setId(obj.getString(0));
                                            user.setN(obj.getString(1));
                                            
                                        }
                                        userlist.add(user);
                                    }
                                    
                                    if(userlist.size()==0){
                                        View inflater = getLayoutInflater().inflate(R.layout.productdialoglist_item, null);
                                        CheckBox check = (CheckBox) inflater.findViewById(R.id.checkBox1);
                                        check.setVisibility(View.GONE);
                                        List<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();
                                        HashMap<String, String> hash = new HashMap<String, String>();
                                        hash.put("produtctname", "暂无业务员");
                                        list.add(hash);
                                        SimpleAdapter adapters = new SimpleAdapter(ManagerSalesmanlistActivity.this,list , R.layout.productdialoglist_item, new String[]{"produtctname"}, new int[]{R.id.productname});
                                        
                                        listview.setAdapter(adapters);
                                        
                                    }else{
                                        showCheckBoxListView();
                                        //取传到managerissuemessageactvivity的选中业务员
                                            if(salesmanlist.size()!=0){
                                                for(int i=0; i<salesmanlist.size(); i++){
                                                    for(int j=0; j<userlist.size(); j++){
                                                        PhoneProductType p = (PhoneProductType) salesmanlist.get(i).get("item_tv");
                                                        PhoneProductType ap = (PhoneProductType) userlist.get(j);
                                                        if(p.getId().equals(ap.getId())){
                                                            HashMap<String, Object> maps = new HashMap<String, Object>();
                                                            maps.put("item_tv", userlist.get(j));
                                                            maps.put("item_cb", (Boolean)salesmanlist.get(i).get("item_cb"));
                                                            alesmanstate.set(j, maps);
                                                            MyAdapter.isSelected.put(j, (Boolean)salesmanlist.get(i).get("item_cb"));
                                                            count+=1;
                                                        }
                                                    }
                                                }
                                            }
                                    }
                                    //加载要编辑的业务员
                                    if(articleid!=null){
                                        List<NameValuePair> param = new ArrayList<NameValuePair>();
                                        param.add(new BasicNameValuePair("companyCode", Param.companyCode));
                                        param.add(new BasicNameValuePair("articleId", articleid));
                                        new InternetThread(param, "articlereader_queryArticleSalesman.action", messageHandler, 2).start();
                                    }
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                    }else{
                        message="数据加载失败!";
                    }
                    progressDialog.dismiss();
                    Toast.makeText(ManagerSalesmanlistActivity.this,message, Toast.LENGTH_SHORT).show();
                }
                //加载以选择的业务员
                if(msg.arg2==2){
                    if(msg.arg1==1){
                        JSONObject jsonObject = (JSONObject) msg.obj;
                            try {
                                if(jsonObject.getBoolean("success")){
                                    String salesmanid = jsonObject.getString("salesmanid");
                                    String a[] = salesmanid.split("@");  
                                    for(int i=0; i<alesmanstate.size(); i++){
                                        PhoneProductType map = (PhoneProductType) alesmanstate.get(i).get("item_tv");
                                        for(int j=0; j<a.length; j++){
                                            if(map.getId().equals(a[j])){
                                                HashMap<String, Object> maps = new HashMap<String, Object>();
                                                maps.put("item_tv", map);
                                                maps.put("item_cb", true);
                                                alesmanstate.set(i, maps);
                                                MyAdapter.isSelected.put(i, true);
                                                adapter.notifyDataSetChanged();
                                            }
                                        }
                                    }
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                    }else{
                        message="数据加载失败!";
                    }
                }
                
            }
        }
}

 

posted @ 2013-07-26 09:07  xxdc  阅读(535)  评论(0编辑  收藏  举报