Reputation: 2594
I am using Checkbox with each and every list item, and when user do tap on any of the checkbox i am storing that list item into SQLite database, but whenever i do restart my app not getting check for list items those i checked earlier.
So How do I save state to Checkbox ?
@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();
}
Upvotes: 3
Views: 1384
Reputation: 13555
try this way,this worked for me
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;
}
}
Upvotes: 0
Reputation: 2496
You should check every data before inflating whether that data is in DB or not, on the base of result you should check the value of checkbox, you are not checking.
You need to check
holder.checkBox.setChecked(true/false);
Upvotes: 4
Reputation: 1115
In getView method, the code should be
if(strDataExist)
{
holder.checkBox.setChecked(true);
}
else
{
holder.checkBox.setChecked(false);
}
Upvotes: 3
Reputation: 1
I am not sure about your question, but I'm going to try help you.
I think that you want to inicializate your checkbox
with checked
or not depending if you have saved into database
previously.
In the method getView
you should check if the service exists in the database with method public boolean Exists(String strServiceName)
(you shoud use lowercase for method's name).
...
holder.checkBox = (CheckBox) v.findViewById(R.id.cbBox);
holder.checkBox.setChecked(exists(actorList.get(position).getName().toString()));
Regards.
UPDATE If you want to save the service status if the the service name exists in the database. That coul be a solution :
getView(...){
//...
if (databaseHandler.exists(serviceName)){
Service service = new Service(serviceName, holder.checkBox.isChecked());
databaseHandler.save(service);
}
}
Upvotes: 0