Android:如何保存多个复选框状态,甚至关闭和重新打开应用程序
我正在使用带有复选框的自定义listview…每当我选择复选框项时,它都会被选中,没有任何问题…关闭并重新打开应用程序后,选中的复选框项显示为未选中状态…如何在重新打开应用程序后保存选中的复选框项…我知道使用共享首选项是可能的…以下是代码Android:如何保存多个复选框状态,甚至关闭和重新打开应用程序,android,Android,我正在使用带有复选框的自定义listview…每当我选择复选框项时,它都会被选中,没有任何问题…关闭并重新打开应用程序后,选中的复选框项显示为未选中状态…如何在重新打开应用程序后保存选中的复选框项…我知道使用共享首选项是可能的…以下是代码 public class SelectUserAdapter extends BaseAdapter { public List<SelectUser> _data; private ArrayList<SelectUser> arr
public class SelectUserAdapter extends BaseAdapter {
public List<SelectUser> _data;
private ArrayList<SelectUser> arraylist;
Context _c;
ViewHolder v;
//RoundImage roundedImage;
List<String> list;
public String blockedlist;
public SelectUserAdapter(List<SelectUser> selectUsers, Context context) {
_data = selectUsers;
_c = context;
this.arraylist = new ArrayList<SelectUser>();
this.arraylist.addAll(_data);
}
@Override
public int getCount() {
return _data.size();
}
@Override
public Object getItem(int i) {
return _data.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
View view = convertView;
if (view == null) {
LayoutInflater li = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.contacts_diplay_row, null);
Log.e("Inside", "here--------------------------- In view1");
} else {
view = convertView;
Log.e("Inside", "here--------------------------- In view2");
}
v = new ViewHolder();
v.title = (TextView) view.findViewById(R.id.name);
v.check = (CheckBox) view.findViewById(R.id.check);
v.phone = (TextView) view.findViewById(R.id.no);
v.imageView = (ImageView) view.findViewById(R.id.pic);
final SelectUser data = (SelectUser) _data.get(i);
v.title.setText(data.getName());
// v.check.setChecked(data.getCheckedBox());
v.phone.setText(data.getPhone());
final SelectUser p = getProduct(i);
v.check.setOnCheckedChangeListener(myCheckChangeList);
v.check.setTag(i);
v.check.setChecked(p.isSelected);
// Set image if exists
try {
if (data.getThumb() != null) {
v.imageView.setImageBitmap(data.getThumb());
} else {
v.imageView.setImageResource(R.drawable.ic_launcher);
}
// Seting round image
Bitmap bm = BitmapFactory.decodeResource(view.getResources(), R.drawable.ic_launcher); // Load default image
//roundedImage = new RoundImage(bm);
//v.imageView.setImageDrawable(roundedImage);
} catch (OutOfMemoryError e) {
// Add default picture
v.imageView.setImageDrawable(this._c.getDrawable(R.drawable.ic_launcher));
e.printStackTrace();
}
Log.e("Image Thumb", "--------------" + data.getThumb());
// Set check box listener android
v.check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CheckBox checkBox = (CheckBox) view;
if (checkBox.isChecked()) {
data.setCheckedBox(true);
Log.i("cdcd", "onItemClick: " +data.toString());
} else {
data.setCheckedBox(false);
}
}
});
view.setTag(data);
return view;
}
// Filter Class
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
_data.clear();
if (charText.length() == 0) {
_data.addAll(arraylist);
} else {
for (SelectUser wp : arraylist) {
if (wp.getName().toLowerCase(Locale.getDefault())
.contains(charText)) {
_data.add(wp);
}
}
}
notifyDataSetChanged();
}
// for check box................
SelectUser getProduct(int position) {
return ((SelectUser) getItem(position));
}
ArrayList<SelectUser> getBox() {
ArrayList<SelectUser> box = new ArrayList<SelectUser>();
for (SelectUser p : arraylist) {
if (p.isSelected)
box.add(p);
}
return box;
}
CompoundButton.OnCheckedChangeListener myCheckChangeList = new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
getProduct((Integer) buttonView.getTag()).isSelected = isChecked;
String result = "999";
for (SelectUser pp : getBox()) {
if (pp.isSelected){
result += "," +pp.phone;// PhoneNumberUtils.formatNumber(pp.phone)
list = new ArrayList<String>();
list.add(result);
}
}
blockedlist = String.valueOf(list);
Toast.makeText(_c, String.valueOf(blockedlist), Toast.LENGTH_LONG).show();
}
};
static class ViewHolder {
ImageView imageView;
TextView title, phone;
CheckBox check;
}
public类SelectUserAdapter扩展BaseAdapter{
公共列表数据;
私有ArrayList ArrayList;
语境;
持票人v;
//圆形图像圆形图像;
名单;
公共字符串阻止列表;
公共SelectUserAdapter(列出selectUsers,上下文){
_数据=选择用户;
_c=上下文;
this.arraylist=新的arraylist();
this.arraylist.addAll(_data);
}
@凌驾
public int getCount(){
返回_data.size();
}
@凌驾
公共对象getItem(int i){
返回_data.get(i);
}
@凌驾
公共长getItemId(int i){
返回i;
}
@凌驾
公共视图getView(int i、视图转换视图、视图组视图组){
视图=转换视图;
如果(视图==null){
LayoutInflater li=(LayoutInflater)\u c.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
视图=li.充气(右布局触点排,空);
Log.e(“视图1中的“内部”、“此处--------------------”);
}否则{
视图=转换视图;
Log.e(“内部”,“此处-----------------在视图2中”);
}
v=新的视图保持架();
v、 title=(TextView)view.findViewById(R.id.name);
v、 check=(复选框)view.findViewById(R.id.check);
v、 phone=(TextView)view.findViewById(R.id.no);
v、 imageView=(imageView)view.findViewById(R.id.pic);
最终选择用户数据=(选择用户)\ u data.get(i);
v、 title.setText(data.getName());
//v.check.setChecked(data.getCheckedBox());
v、 setText(data.getPhone());
最终选择用户p=getProduct(i);
v、 check.setOnCheckedChangeListener(myCheckChangeList);
v、 检查setTag(i);
v、 检查。设置检查(p.isSelected);
//设置图像(如果存在)
试一试{
if(data.getThumb()!=null){
v、 setImageBitmap(data.getThumb());
}否则{
v、 setImageResource(R.drawable.ic_启动器);
}
//设置圆形图像
位图bm=BitmapFactory.decodeResource(view.getResources(),R.drawable.ic_启动器);//加载默认图像
//RoundeImage=新的RoundImage(bm);
//v、 imageView.setImageDrawable(圆形图像);
}捕获(OutOfMemory错误){
//添加默认图片
v、 setImageDrawable(this.u c.getDrawable(R.drawable.ic_启动器));
e、 printStackTrace();
}
Log.e(“Image Thumb”,“--------------”+data.getThumb());
//设置复选框
v、 check.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
复选框=(复选框)视图;
如果(checkBox.isChecked()){
data.setCheckedBox(真);
Log.i(“cdcd”,“onItemClick:+data.toString());
}否则{
data.setCheckedBox(假);
}
}
});
view.setTag(数据);
返回视图;
}
//过滤类
公共空过滤器(字符串图表文本){
charText=charText.toLowerCase(Locale.getDefault());
_data.clear();
如果(ChartText.length()==0){
_data.addAll(arraylist);
}否则{
对于(选择用户wp:arraylist){
if(wp.getName().toLowerCase(Locale.getDefault())
.contains(图表文本)){
_添加数据(wp);
}
}
}
notifyDataSetChanged();
}
//对于复选框。。。。。。。。。。。。。。。。
选择用户获取产品(int位置){
返回((SelectUser)getItem(position));
}
ArrayList getBox(){
ArrayList box=新的ArrayList();
用于(选择用户p:arraylist){
如果(p.i当选)
框。添加(p);
}
返回框;
}
CompoundButton.OnCheckedChangeListener myCheckChangeList=新建CompoundButton.OnCheckedChangeListener(){
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
getProduct((整数)按钮View.getTag()).isSelected=isChecked;
字符串结果=“999”;
对于(选择用户pp:getBox()){
如果(第1页){
结果+=”,“+pp.phone;//phonenumberrutils.formatNumber(pp.phone)
列表=新的ArrayList();
列表。添加(结果);
}
}
blockedlist=String.valueOf(列表);
Toast.makeText(_c,String.valueOf(blockedlist),Toast.LENGTH_LONG.show();
}
};
静态类视窗夹{
图像视图图像视图;
文本视图标题,电话;
复选框检查;
}
}在首选项数据中存储复选框的值,每次打开应用程序时从首选项中获取值。在首选项数据中存储复选框的值,每当打开应用程序时,从首选项中获取值。为每个复选框获取布尔值。为每个复选框获取布尔值。将复选框的状态存储在首选项中,并在创建UI时将其拉出。您回答了自己的问题…使用SharedReferences。
如何在重新打开应用程序后保存选中的复选框项目
???在关闭应用程序之前?是的,我尝试了..通过使用共享首选项,我传递了选中的复选框值..同时将该SharedReference值设置为v.check.setChecked(p.isSelected);在上下滚动时,其他一些复选框也会自动被选中。在首选项中存储复选框的状态,并在创建UI时将其拉出。您回答了自己的问题…使用SharedReferences。如何在重新打开应用程序后保存选中的复选框项目
???在关闭应用程序之前?是的,我尝试了..使用共享