2015-07-10 2 views
3

Я использую флажок с каждым элементом списка, а когда пользователь нажимает на любой из флажков, я сохраняю этот элемент списка в базе данных SQLite, но всякий раз, когда я перезапускаю свое приложение, не получая проверку списка пункты, которые я проверил ранее.ListView Checkbox Состояние сохранения

So Как сохранить состояние в флажке?

@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();   
    }   
+0

где вы настройки проверенное значение для этого флажка – Naveen

ответ

3

В методе GetView, код должен быть

if(strDataExist) 
    { 
     holder.checkBox.setChecked(true); 
    } 
    else 
    { 
     holder.checkBox.setChecked(false); 
    } 
+0

спасибо, что я только что заменил actorList.get (position) .setChecked (true); с holder.checkBox.setChecked (true); и я готов .. – Oreo

+1

Добро пожаловать. может упростить код с помощью этого 'holder.checkBox.setChecked (strDataExist);' только вместо этого напишите if else statement. – zzas11

+0

ok спасибо .... .. – Oreo

0

Я не уверен в вашем вопросе, но я попробую помочь вам.

Я думаю, что вы хотите сделать официальное уведомление о своем checkbox с помощью checked или не зависеть, если вы сохранили ранее database.

В методе getView вы должны проверить, существует ли служба в базе данных с помощью метода public boolean Exists(String strServiceName) (вы используете нижний регистр для имени метода).

...

holder.checkBox = (CheckBox) v.findViewById(R.id.cbBox); 
holder.checkBox.setChecked(exists(actorList.get(position).getName().toString())); 

С уважением.

UPDATE Если вы хотите сохранить статус службы, если имя службы существует в базе данных. Это Коула быть решением:

getView(...){ 
//... 
if (databaseHandler.exists(serviceName)){ 
    Service service = new Service(serviceName, holder.checkBox.isChecked()); 
    databaseHandler.save(service); 
} 
} 
+0

Да, именно я хотел бы сохранить состояние флажка, если имя списка элементов существует в базе данных, но ia m не получить, как я могу проверить, что имя существует или нет в базе данных в методе getView (..) – Oreo

+0

Я обновил свой андерсер. –

4

Вы должны проверять каждые данные перед накачиванием ли эти данные в БД или нет, на основании результата вы должны проверить значение флажка, вы не проверять.

Вы должны проверить

holder.checkBox.setChecked(true/false); 
+0

Я обновил свой код, проверьте выше, но все еще сталкиваюсь с той же проблемой, где мне не хватает – Oreo

+0

Вам нужно проверить => holder.checkBox.setChecked (true/false); –

+0

спасибо, что я пометил ваш ответ как полезный – Oreo

0

попробовать этот путь, это работает для меня

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; 
    } 
} 
Смежные вопросы