Как запомнить позиции флажков?

#android #checkbox

#Android #флажок

Вопрос:

У меня есть listview с пользовательским адаптером массива, и я пытаюсь выяснить, как сохранить состояние, в котором были отмечены позиции. Я думал о сохранении позиции флажка в массиве int каждый раз, когда проверяется элемент, а затем в getView, если массив содержит номер, он установил бы IsChecked () == true. Однако я действительно не знаю, как выполнять поиск по массиву. Любая помощь была бы отличной! вот некоторый базовый код для адаптера:

  @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final Contact c = (Contact) getItem(position);
        final ViewHolder viewHolder = new ViewHolder();
        // if the array item is null, nothing to display, just return null
        if (c == null) {
            return null;
        }

        LayoutInflater inflater = (LayoutInflater)
        getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        TwoLineListItem view;


        if (convertView == null) {
            view = (TwoLineListItem) inflater.inflate(resourceId, parent, false);
        } else {
            view = (TwoLineListItem) convertView;
        }

        final int pos = position;
       final SharedPreferences myprefs = PreferenceManager.getDefaultSharedPreferences(getContext());
        final SharedPreferences.Editor editor = myprefs.edit();
        viewHolder.checkbox = (CheckBox)view.findViewById(R.id.checkbox);

        viewHolder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (buttonView.isChecked()){

                contactInfo.add(pos "," c.getName() "," c.getNumber());

                StringBuilder sb = new StringBuilder();
                for (String s : contactInfo)
                {
                    sb.append(s);
                    sb.append("t");
                }

                editor.putString("contacts", sb.toString()).commit();



                }else {
                    contactInfo.remove(pos "," c.getName() "," c.getNumber());
                    StringBuilder sb = new StringBuilder();
                    for (String s : contactInfo)
                    {
                        sb.append(s);
                        sb.append("t");
                    }
                    editor.putString("contacts", sb.toString()).commit();

                }
            }
        });
  

Ответ №1:

 CheckBox check =(CheckBox)v.findViewById(R.id.check);
            check.setTag(new Integer(childPosition));
            check.setChecked(listEditable.get(childPosition).isSelected());
            check.setOnCheckedChangeListener(new OnCheckedChangeListener() {          
                  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
                    {
                        Integer myPosition=(Integer)buttonView.getTag();
                        if ( isChecked )
                        {
                            listEditable.get(myPosition).setSelected(true);
                        }
                        else
                        {
                            listEditable.get(myPosition).setSelected(false);
                        }
                    }         
            });