Android ListView复选框保存状态
我对每个列表项都使用复选框,当用户点击任何复选框时,我将该列表项存储到SQLite数据库中,但每当我重新启动应用程序时,都不会检查我之前检查的列表项 那么如何将状态保存到复选框Android ListView复选框保存状态,android,sqlite,listview,checkbox,Android,Sqlite,Listview,Checkbox,我对每个列表项都使用复选框,当用户点击任何复选框时,我将该列表项存储到SQLite数据库中,但每当我重新启动应用程序时,都不会检查我之前检查的列表项 那么如何将状态保存到复选框 @Override public View getView(final int position, View convertView, ViewGroup parent) { // convert view = design View v = convertView; if (v == null
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
if (v == null) {
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.tvName = (TextView) v.findViewById(R.id.textView1);
holder.checkBox = (CheckBox) v.findViewById(R.id.cbBox);
boolean strDataExist = activity.myDb.Exists(actorList.get(position).getName());
if(strDataExist)
{
actorList.get(position).setChecked(true);
}
else
{
actorList.get(position).setChecked(false);
}
v.setTag(holder);
}
else
{
holder = (ViewHolder) v.getTag();
}
我不确定你的问题,但我会尽力帮助你 我认为您希望取消选中
复选框的复选框
,这取决于您以前是否已保存到数据库
在方法getView
中,您应该使用方法public boolean exists(字符串strServiceName)
检查数据库中是否存在服务(您应该使用小写字母作为方法名称)
问候
更新
如果要在数据库中存在服务名称时保存服务状态。这可能是一个解决方案:
getView(...){
//...
if (databaseHandler.exists(serviceName)){
Service service = new Service(serviceName, holder.checkBox.isChecked());
databaseHandler.save(service);
}
}
在膨胀之前,您应该检查每个数据是否以DB为单位,根据结果您应该检查复选框的值,您没有检查
你需要检查一下
holder.checkBox.setChecked(true/false);
在getView方法中,代码应该是
if(strDataExist)
{
holder.checkBox.setChecked(true);
}
else
{
holder.checkBox.setChecked(false);
}
试着这样,这对我很有效
public class CustomAdapter extends BaseAdapter {
private final LayoutInflater inflater;
private final Context context;
private List<ModelPooja> listData;
public CustomAdapter(Context mainActivity, List<ModelPooja> listData) {
context = mainActivity;
this.listData = listData;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item_poojaselection, null);
holder.tv = (TextView) convertView.findViewById(R.id.list_item_poojaname);
holder.checks = (CheckBox) convertView.findViewById(R.id.list_item_poojacheck);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.checks.setOnCheckedChangeListener(null);
holder.checks.setFocusable(false);
if (listData.get(position).isselected) {
holder.checks.setChecked(true);
} else {
holder.checks.setChecked(false);
}
holder.checks.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton cb, boolean b) {
if (checkMaxLimit()) {
if (listData.get(position).isselected && b) {
holder.checks.setChecked(false);
listData.get(position).isselected = false;
} else {
holder.checks.setChecked(false);
listData.get(position).isselected = false;
Toast.makeText(context, "Max limit reached", Toast.LENGTH_SHORT).show();
}
} else {
if (b) {
listData.get(position).isselected = true;
} else {
listData.get(position).isselected = false;
}
}
}
});
holder.tv.setText(listData.get(position).getPOOJA_LISTING_NAME());
return convertView;
}
public boolean checkMaxLimit() {
int countermax = 0;
for(ModelPooja item : listData){
if(item.isselected){
countermax++;
}
}
return countermax >= 5;
}
public class ViewHolder {
TextView tv;
public CheckBox checks;
}
}
公共类CustomAdapter扩展了BaseAdapter{
私人充气机;
私人最终语境;
私有列表数据;
公共CustomAdapter(上下文mainActivity,列表listData){
上下文=主要活动;
this.listData=listData;
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
@凌驾
public int getCount(){
返回listData.size();
}
@凌驾
公共对象getItem(int位置){
返回listData.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
holder=新的ViewHolder();
convertView=充气机。充气(R.layout.list\u item\u poojaselection,null);
holder.tv=(TextView)convertView.findViewById(R.id.list\u item\u poojaname);
holder.checks=(复选框)convertView.findViewById(R.id.list\u item\u poojacheck);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.checks.setOnCheckedChangeListener(null);
保持架。检查。设置聚焦(假);
if(listData.get(position.isselected){
holder.checks.setChecked(true);
}否则{
holder.checks.setChecked(假);
}
setOnCheckedChangeListener(新的CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮cb,布尔值b){
if(checkMaxLimit()){
if(listData.get(position.isselected&&b){
holder.checks.setChecked(假);
listData.get(position).isselected=false;
}否则{
holder.checks.setChecked(假);
listData.get(position).isselected=false;
Toast.makeText(上下文,“达到最大限制”,Toast.LENGTH_SHORT).show();
}
}否则{
如果(b){
listData.get(position).isselected=true;
}否则{
listData.get(position).isselected=false;
}
}
}
});
holder.tv.setText(listData.get(position.getPOOJA_LISTING_NAME());
返回视图;
}
公共布尔值checkMaxLimit(){
int countermax=0;
对于(ModelPooja项目:listData){
如果(项目.已选定){
countermax++;
}
}
返回计数器最大值>=5;
}
公共类视图持有者{
文本视图电视;
公共复选框检查;
}
}
您在哪里设置复选框的选中值是的,如果列表项名称存在于数据库中,我想保存复选框的状态,但我不知道如何在getView(..)方法中检查该名称是否存在于数据库中我已更新了代码,请勾选上面的复选框,但仍然面临相同的问题,在我丢失的地方,您需要选中=>holder.checkBox.setChecked(真/假);谢谢,我刚刚替换了actorList.get(position).setChecked(true);带有holder.checkBox.setChecked(true);我做完了……不客气。可以使用此holder.checkBox.setChecked(strDataExist)简化代码代码>只写if-else语句。
public class CustomAdapter extends BaseAdapter {
private final LayoutInflater inflater;
private final Context context;
private List<ModelPooja> listData;
public CustomAdapter(Context mainActivity, List<ModelPooja> listData) {
context = mainActivity;
this.listData = listData;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item_poojaselection, null);
holder.tv = (TextView) convertView.findViewById(R.id.list_item_poojaname);
holder.checks = (CheckBox) convertView.findViewById(R.id.list_item_poojacheck);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.checks.setOnCheckedChangeListener(null);
holder.checks.setFocusable(false);
if (listData.get(position).isselected) {
holder.checks.setChecked(true);
} else {
holder.checks.setChecked(false);
}
holder.checks.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton cb, boolean b) {
if (checkMaxLimit()) {
if (listData.get(position).isselected && b) {
holder.checks.setChecked(false);
listData.get(position).isselected = false;
} else {
holder.checks.setChecked(false);
listData.get(position).isselected = false;
Toast.makeText(context, "Max limit reached", Toast.LENGTH_SHORT).show();
}
} else {
if (b) {
listData.get(position).isselected = true;
} else {
listData.get(position).isselected = false;
}
}
}
});
holder.tv.setText(listData.get(position).getPOOJA_LISTING_NAME());
return convertView;
}
public boolean checkMaxLimit() {
int countermax = 0;
for(ModelPooja item : listData){
if(item.isselected){
countermax++;
}
}
return countermax >= 5;
}
public class ViewHolder {
TextView tv;
public CheckBox checks;
}
}