Android-在列表视图中保存复选框状态

时间:2012-04-05 07:02:01

标签: android listview

我有listview的复选框和“保存”按钮 无论我选中哪个复选框并单击“保存”按钮,我都希望将与这些已检查行相关的数据保存到数据库中 这是我的代码

public class CardDetailsAdapter extends BaseAdapter {    
private static ArrayList<CardDetails> searchArrayList;          
private LayoutInflater mInflater;       

 private boolean[] itemChecked =  new boolean[100];

public CardDetailsAdapter(Context context, ArrayList<CardDetails> results) {
     map = new HashMap<Integer, Boolean>();
    searchArrayList = results;
    mInflater = LayoutInflater.from(context);
}

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

public Object getItem(int position) {
    return searchArrayList.get(position);
}

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

public View getView(final int position, View convertView, final ViewGroup parent) {
    final ViewHolder holder;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.welcomelistview, null);
        holder = new ViewHolder();
        holder.bankName = (TextView) convertView.findViewById(R.id.BankNameID);
        holder.messages = (TextView) convertView.findViewById(R.id.messageID);
        holder.chkbox = (CheckBox) convertView.findViewById(R.id.chkBoxID);
        System.out.println("is checked==> " + holder.chkbox.isChecked());

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }        
    holder.bankName.setText(searchArrayList.get(position).getBankName());
    holder.messages.setText(searchArrayList.get(position).getMessages());       
    holder.chkbox.setChecked(false);
    // save position and checking status into tag
    holder.chkbox.setTag(position);
    holder.chkbox.setOnClickListener(new OnClickListener() {            
        public void onClick(View v) {
             HashMap<Integer, Boolean> mSimpleAdapter = new HashMap<Integer, Boolean>();
             int p = (Integer) (v.getTag());
                if (holder.chkbox.isChecked() == true) {
                    itemChecked[Integer.valueOf(position)] = holder.chkbox.isChecked();  
                }else{
                    itemChecked[Integer.valueOf(position)] = holder.chkbox.isChecked();  
                 }

             mSimpleAdapter.put(p, itemChecked[position]);
             holder.chkbox.setChecked(itemChecked[position]); 
        }
    });
    return convertView;
}

static class ViewHolder {
    TextView bankName;
    TextView messages;
    CheckBox chkbox;
}}

和活动类

import com.ispl.CFSMS.helper.CardDetailsAdapter;
    public class WelcomePage extends Activity{
     CardDetailsAdapter mListAdapter;
    ArrayList<Integer> arList = new ArrayList<Integer>();
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcomepage); 
        final ArrayList<CardDetails> cardResults = GetCardDetails();
        final ListView welcomelist = (ListView) findViewById(R.id.welcomelistID);        
        welcomelist.setAdapter(new CardDetailsAdapter(this, cardResults));                      
        welcomelist.setOnItemLongClickListener(new OnItemLongClickListener() {
            public boolean onItemLongClick(AdapterView<?> a, View v, int position, long id) {
                Object o = welcomelist.getItemAtPosition(position);
                CardDetails fullObject = (CardDetails)o;
                Intent r=new Intent(WelcomePage.this , CardMenuActivity.class);
                r.putExtra("BankName", fullObject.getBankName());
                r.putExtra("CardNumber", fullObject.getCardNumber());
                startActivityForResult(r, position);
                return false;
            }
        });

        CheckBox checkbox = (CheckBox)findViewById(R.id.chkBoxID);
        Button saveTODbBtn = (Button)findViewById(R.id.saveID);
        saveTODbBtn.setOnClickListener(new OnClickListener() {              
            public void onClick(View v) {               
                //get the checkbox status and save related details into database
                Intent intent=new Intent(WelcomePage.this, BankProjectActivity.class);
                startActivity(intent);
            }
        });

    }    
 private ArrayList<CardDetails> GetCardDetails(){
        ArrayList<CardDetails> carddetailresults = new ArrayList<CardDetails>();        
         CardDetails sr1 = new CardDetails();

         sr1.setBankName("Select All");
         sr1.setCardNumber("");
         sr1.setMessages("");
         carddetailresults.add(sr1);

         sr1 = new CardDetails();    
         sr1.setBankName("HDFC Bank" +" "+ "xxxxx1234");
         sr1.setMessages("Messages: " + "10");
         carddetailresults.add(sr1);

         sr1 = new CardDetails();
         sr1.setBankName("ICICI" + " "+ "xxxxx2134");
         sr1.setMessages("Messages: 5");
         carddetailresults.add(sr1);

         sr1 = new CardDetails();
         sr1.setBankName("HSBC" + " "+ "xxxxx8796");
         sr1.setMessages("Messages: 2");
         carddetailresults.add(sr1);

         return carddetailresults;
 }} 

在Adaptar类中我能够获得状态。但是如何保存这些状态并获取活动类中的所有状态,以便在单击保存按钮时保存与这些已检查行相关的所有数据...?

2 个答案:

答案 0 :(得分:3)

您好GetCardDetails()方法添加sr1.setSelected(true)sr1.setSelected(false)

适配器中的

添加以下内容

  public static ArrayList<Boolean> itemChecked1 = null;  
  public CardDetailsAdapter( Context context, ArrayList<CardDetails> results) {
    super( context, R.layout.welcomelistview, R.id.BankNameID, results );
    searchArrayList = results;
    getContext = context;
    mInflater = LayoutInflater.from(context) ;
    itemChecked1 = new ArrayList<Boolean>();
    for (int i = 0; i < results.size(); i++) {
        itemChecked1.add(i, results.get(i).isSelected()); // initializes all items value with false         
    }
}
中的

holder.chkbox.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            CheckBox cb = (CheckBox) v;
            CardDetails planet = (CardDetails) cb.getTag();
            //planet.setSelected(cb.isChecked());
            if (holder.chkbox.isChecked()) {
                itemChecked1.set(position, true);
                holder.chkbox.setChecked(true);
                planet.setSelected(true);
            } else if (!holder.chkbox.isChecked()) {
                itemChecked1.set(position, false);
                holder.chkbox.setChecked(false);
                planet.setSelected(false);
            }
        }
    });

答案 1 :(得分:0)

public View getView(final int position, View convertView,ViewGroup paramViewGroup)
{
    final ViewHolder holder;
    LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
    if (convertView == null) 
    {
        convertView=inflater.inflate(R.layout.addressbook, null);holder = new ViewHolder();
        holder.adddress_name=(TextView)convertView.findViewById(R.id.addressbook_name);
        holder.adddress_number=(TextView)convertView.findViewById(R.id.address_number);
        holder.adddress_name.setText(adddressbook_name.get(position).toString().trim())
        holder.adddress_number.setText(addressbook_number.get(position).toString().trim());
        holder.addressbook_check=(CheckBox)convertView.findViewById(R.id.address_check);convertView.setTag(holder); 
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.addressbook_check.setId(position);

    holder.addressbook_check.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v) 
            {
                CheckBox cb = (CheckBox) v;
                int id = cb.getId();
                if (thumbnailsselection[id])
                {
                    cb.setChecked(false);
                    thumbnailsselection[id] = false;
                }
                else
                {
                    cb.setChecked(true);
                    thumbnailsselection[id] = true;
                }
            }
        });

    holder.addressbook_check.setChecked(thumbnailsselection[position]);
    return convertView;
}

class ViewHolder
{  
    TextView adddress_name;
    TextView adddress_number;
    CheckBox addressbook_check;
}