使用sharedpreferences查询保存已选中的复选框状态

时间:2013-07-19 16:18:57

标签: android android-contacts

现在我已经制作了一个带有复选框的自定义联系人列表。我应该在哪里插入共享首选项的代码,以便选中的复选框将保存在其状态中?它应该在onClick方法下吗?

这是我的联系人代码:

public class ContactList extends Activity implements OnItemClickListener{


        List<String> name1 = new ArrayList<String>();
        MyAdapter ma ;
        Button select;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);


            setContentView(R.layout.main);

            getAllCallLogs(this.getContentResolver());
            ListView lv= (ListView) findViewById(R.id.lv);
            ma = new MyAdapter();
            lv.setAdapter(ma);
            lv.setOnItemClickListener(this); 
            lv.setItemsCanFocus(false);
            lv.setTextFilterEnabled(true);

            // select button 
            select = (Button) findViewById(R.id.button1);
            select.setOnClickListener(new OnClickListener()
            {

        @Override
        public void onClick(View v) {
            StringBuilder checkedcontacts= new StringBuilder();
            System.out.println("............"+ma.mCheckStates.size());
            for(int i = 0; i < name1.size(); i++)
                {
                if(ma.mCheckStates.get(i)==true)
                {
                     checkedcontacts.append(name1.get(i).toString());
                     checkedcontacts.append("\n");            
                }

                else
                {
                    System.out.println("..Not Checked......"+name1.get(i).toString());
                }

            }

            finish();

        }       
    });
}

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            // TODO Auto-generated method stub
             ma.toggle(arg2);
        }

        public void getAllCallLogs(ContentResolver cr) {

            Cursor phones = cr.query(Phone.CONTENT_URI, null, null, null, Phone.DISPLAY_NAME + " ASC");
            while (phones.moveToNext())
            {
              String name=phones.getString(phones.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
              name1.add(name);
            }

            phones.close();
         }

        class MyAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener
        {  private SparseBooleanArray mCheckStates;
           LayoutInflater mInflater;
            TextView tv;
            CheckBox cb;
            MyAdapter()
            {
                mCheckStates = new SparseBooleanArray(name1.size());
                mInflater = (LayoutInflater)ContactList.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }
            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return name1.size();
            }

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

            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub

                return 0;
            }

            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
             View vi=convertView;
                 if(convertView==null)
                 vi = mInflater.inflate(R.layout.row, null); 
                 TextView tv= (TextView) vi.findViewById(R.id.textView1);

                 cb = (CheckBox) vi.findViewById(R.id.checkBox1);
                 tv.setText(name1.get(position));

                 cb.setTag(position);
                 cb.setChecked(mCheckStates.get(position, false));
                 cb.setOnCheckedChangeListener(this);

                return vi;
            }
             public boolean isChecked(int position) {
                    return mCheckStates.get(position, false);
                }

                public void setChecked(int position, boolean isChecked) {
                    mCheckStates.put(position, isChecked);
                    System.out.println("hello...........");
                    notifyDataSetChanged();
                }

                public void toggle(int position) {
                    setChecked(position, !isChecked(position));
                }
            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                // TODO Auto-generated method stub

                 mCheckStates.put((Integer) buttonView.getTag(), isChecked);    

            }

         }

 } 

0 个答案:

没有答案