遇到这样的需求是:点击进入一个listview,每个item需要一个checkbox来进行勾选,当退出该activity之后,再次进入该activity之后,需要看到上次退出时候的checkbox的状态,得益于这位前辈的博文已经讲得很好了:listview checkbox 保留状态  可以参考一下,他是默认是不选中,而我的需求第一次进入是全部选中:


主要控制代码如下:SelectInstrumentActivity.java:

package client.verbank.mtp.allone.frame.systemsettings.nextpage;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import jedi.verbank.CSTS3.comm.struct.Instrument;import jedi.verbank.client.station.api.doc.APIDoc;import android.app.Activity;import android.content.SharedPreferences;import android.os.Bundle;import android.preference.PreferenceManager;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;import client.verbank.mtp.allone.R;import client.verbank.mtp.allone.frame.systemsettings.nextpage.SelectInstrumentActivityAdapter.ViewHolder;import client.verbank.mtp.allone.util.SharepreferencesUtilSystemSettings;public class SelectInstrumentActivity extends Activity {List> listems;Map ifchose = new HashMap();private ListView lv;private SelectInstrumentActivityAdapter mAdapter;private ArrayList list;private Button bt_selectall;private Button bt_cancel;private Button bt_deselectall;private Button newsback;private int checkNum; // 记录选中的条目数量private TextView tv_show;// 用于显示选中的条目数量private Boolean flag = false;private int id;// 消息编号,用来存储故障标号,从上一个界面传来private String defaul = "";// 默认的全部不勾选private String selectall = "";// 全部勾选/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_systemsettings_selectinstrument);// Intent i = getIntent();// Bundle b = i.getBundleExtra("ID");// id = b.getInt("id");/* 实例化各个控件 */lv = (ListView) findViewById(R.id.systeminstrumentlistview);bt_selectall = (Button) findViewById(R.id.bt_selectall);bt_cancel = (Button) findViewById(R.id.bt_cancleselectall);bt_deselectall = (Button) findViewById(R.id.bt_deselectall);tv_show = (TextView) findViewById(R.id.tv);newsback = (Button) findViewById(R.id.newsback);list = new ArrayList();// 为Adapter准备数据initDate();if (!flag) {   //flag标志是为了识别是否为第一次进入全部勾选,当第二次进入默认不勾选,让用户勾选// 初始化勾选框信息,默认都是以未勾选为单位for (int n = 0; n < list.size(); n++) {defaul = defaul + "1";}flag = true;} else {// 初始化勾选框信息,默认都是以未勾选为单位for (int n = 0; n < list.size(); n++) {defaul = defaul + "0";selectall = selectall + "1";}}// 实例化自定义的MyAdaptermAdapter = new SelectInstrumentActivityAdapter(list, this);// 绑定Adapterlv.setAdapter(mAdapter);getCheck();// 获取信息,也可说是初始化信息newsback.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String str = "";// 确定后直接将信息写入preference保存以备下一次读取使用for (int i = 0; i < list.size(); i++) {if (SelectInstrumentActivityAdapter.getIsSelected().get(i)) {str = str + '1';} else {str = str + '0';}}saveCheck(String.valueOf(id), str);// 将数据已字符串形式保存起来,下次读取再用String inarray = SharepreferencesUtilSystemSettings.getValue(getApplicationContext(), "instrument", "AUD/CHF");String[] as = inarray.split(",");StringBuilder str2 = new StringBuilder("");for (int i = 0; i < as.length; i++) {str2.append(as[i]);}finish();}});// 全选按钮的回调接口bt_selectall.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 遍历list的长度,将MyAdapter中的map值全部设为truefor (int i = 0; i < list.size(); i++) {SelectInstrumentActivityAdapter.getIsSelected().put(i, true);}// 数量设为list的长度checkNum = list.size();StringBuilder strall = new StringBuilder("");for (String selstr : list) {strall.append(selstr).append(",");}SharepreferencesUtilSystemSettings.putValue(getApplicationContext(), "instrument",strall.toString());tv_show.setText("已选中" + checkNum + "项");// 刷新listview和TextView的显示dataChanged();}});// 反选按钮的回调接口bt_cancel.setOnClickListener(new OnClickListener() {StringBuilder strfan = new StringBuilder("");@Overridepublic void onClick(View v) {strfan.delete(0, strfan.capacity());// 遍历list的长度,将已选的设为未选,未选的设为已选for (int i = 0; i < list.size(); i++) {if (SelectInstrumentActivityAdapter.getIsSelected().get(i)) {SelectInstrumentActivityAdapter.getIsSelected().put(i,false);checkNum--;} else {SelectInstrumentActivityAdapter.getIsSelected().put(i,true);strfan.append(list.get(i)).append(",");SharepreferencesUtilSystemSettings.putValue(getApplicationContext(), "instrument",strfan.toString());checkNum++;}}// 刷新listview和TextView的显示dataChanged();}});// 取消按钮的回调接口bt_deselectall.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 遍历list的长度,将已选的按钮设为未选for (int i = 0; i < list.size(); i++) {if (SelectInstrumentActivityAdapter.getIsSelected().get(i)) {SelectInstrumentActivityAdapter.getIsSelected().put(i,false);checkNum--;// 数量减1}}SharepreferencesUtilSystemSettings.putValue(getApplicationContext(), "instrument", "");// 刷新listview和TextView的显示dataChanged();}});final StringBuilder str = new StringBuilder("");// 绑定listView的监听器lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤ViewHolder holder = (ViewHolder) arg1.getTag();// 改变CheckBox的状态holder.cb.toggle();// 将CheckBox的选中状况记录下来SelectInstrumentActivityAdapter.getIsSelected().put(arg2,holder.cb.isChecked());// 调整选定条目if (holder.cb.isChecked() == true) {str.delete(0, str.capacity());checkNum++;} else {str.delete(0, str.capacity());checkNum--;}for (int i = 0; i < list.size(); i++) {if (SelectInstrumentActivityAdapter.getIsSelected().get(i)) {str.append(list.get(i)).append(",");}}SharepreferencesUtilSystemSettings.putValue(getApplicationContext(), "instrument", str.toString());tv_show.setText("已选中" + checkNum + "项");}});}// 初始化数据private void initDate() {// 去掉相同的商品List instList = APIDoc.getSystemDocCaptain().getInstrumentList();for (Instrument instrument : instList) {list.add(instrument.getInstrument());}}
// 得到保存在这个activity中的数据public void getCheck() {SharedPreferences mPerferences = PreferenceManager.getDefaultSharedPreferences(this);// 获取默认的preference// 获取activity私有的preferenceSharedPreferences m_private = this.getPreferences(MODE_PRIVATE);String counter = mPerferences.getString(String.valueOf(id), defaul);// 如果没有获取到的话默认是0for (int i = 0; i < list.size(); i++) {if (counter.charAt(i) == '1') {SelectInstrumentActivityAdapter.getIsSelected().put(i, true);}}}// 保存需要保存的数据public void saveCheck(String ID, String data) {// 保存shujuSharedPreferences mPerferences = PreferenceManager.getDefaultSharedPreferences(this);SharedPreferences m_private = this.getPreferences(MODE_PRIVATE);SharedPreferences.Editor mEditor = mPerferences.edit();mEditor.putString(ID, data);mEditor.commit();}// 刷新listview和TextView的显示private void dataChanged() {// 通知listView刷新mAdapter.notifyDataSetChanged();// TextView显示最新的选中数目tv_show.setText("已选中" + checkNum + "项");};}


适配器类:SelectInstrumentActivityAdapter.java

package client.verbank.mtp.allone.frame.systemsettings.nextpage;import java.util.ArrayList;import java.util.HashMap;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 client.verbank.mtp.allone.R;public class SelectInstrumentActivityAdapter extends BaseAdapter {// 填充数据的listprivate ArrayList list;// 用来控制CheckBox的选中状况private static HashMap isSelected;// 上下文private Context context;// 用来导入布局private LayoutInflater inflater = null;// 构造器public SelectInstrumentActivityAdapter(ArrayList list,Context context) {this.context = context;this.list = list;inflater = LayoutInflater.from(context);isSelected = new HashMap();// 初始化数据initDate();}// 初始化isSelected的数据private void initDate() {for (int i = 0; i < list.size(); i++) {getIsSelected().put(i, false);}}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {// 获得ViewHolder对象holder = new ViewHolder();// 导入布局并赋值给convertviewconvertView = inflater.inflate(R.layout.activity_systeminstrument_item, null);holder.tv = (TextView) convertView.findViewById(R.id.item_tv);holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);// 为view设置标签convertView.setTag(holder);} else {// 取出holderholder = (ViewHolder) convertView.getTag();}// 设置list中TextView的显示holder.tv.setText(list.get(position));// 根据isSelected来设置checkbox的选中状况holder.cb.setChecked(getIsSelected().get(position));return convertView;}public static HashMap getIsSelected() {return isSelected;}public static void setIsSelected(HashMap isSelected) {SelectInstrumentActivityAdapter.isSelected = isSelected;}public static class ViewHolder {TextView tv;CheckBox cb;}}

主要要实现保存checkbox的状态的方式使用sharepreferences来保存状态,当选中的时候为1,不选中的时候为0,当再次进入该activity时,使用charat方式来取出每个listview item的状态是为1还是0,接着使用:
SelectInstrumentActivityAdapter.getIsSelected().put(i, true);

来设置状态。

更多相关文章

  1. [android]在上下文菜单的选中事件中获取列表选中的元素
  2. android解决坚屏拍照和保存图片旋转90度的问题,并兼容4.0
  3. Android,LIstView中的OnItemClick点击无效的解决办法
  4. android手机客户端上传文件,java servlet服务器端接收并保存到服
  5. Android(安卓)PureMVC
  6. android三级联动、四级联动(地区选择)
  7. Android(安卓)tabhost让选中项加上背景图
  8. android从服务器下载文件(php+apache+win7+MySql)
  9. activity状态的保存和保持(onRetainNonConfigurationInstance和g

随机推荐

  1. android_lesson_2
  2. [置顶] android Properties的使用
  3. WebViewJavascriptBridge实现js与android
  4. android自带Base64加密解密
  5. Android再次按back键退出
  6. 45个android实例源码
  7. 使一个button无效时变灰
  8. android获取手机通讯录联系人
  9. android 可滑动的View
  10. 解决 ButterKnife8.2.1 与 Dagger2.5 冲