Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
#1

ListView в БД сохранение/восстановление - Android

02.09.2015, 20:37. Просмотров 358. Ответов 12
Метки нет (Все метки)

Есть ListView c CheckBoxами, пользователь отмечает некоторые элементы списка, как лучше сохранить его выбор в базу данных? Записывать в String (текстом)? И как потом восстановить выбранные значения, что бы можно было снова отредактировать и сохранить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2015, 20:37     ListView в БД сохранение/восстановление
Посмотрите здесь:

Восстановление сервиса и Intent Android
Android listview и touch
Цикл по ListView Android
ListView с ресурсами Android
Android Прокрутка listview
Android Сохранение position элемента ListView при поиске
Scroll listview Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.09.2015, 20:58     ListView в БД сохранение/восстановление #2
mcGurov, int. 1 = true, 0 = false.
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
02.09.2015, 21:13  [ТС]     ListView в БД сохранение/восстановление #3
YuraAAA, получается записывать/восстанавливать по id у ChekBox?
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.09.2015, 21:35     ListView в БД сохранение/восстановление #4
mcGurov, по идее, у Вас должна быть модель данных. Пусть это будет некий работник)


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Employee {
 
    private int id;
    private boolean checked;
    //---------
 
 
    public Employee() {
    }
 
    public Employee(int checked) {
        this.checked = checked == 1;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public boolean isChecked() {
        return checked;
    }
 
 
    public void setChecked(int checked) {
        this.checked = checked == 1;
    }
 
 
}
и DAO:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class EmployeeDAO {
 
    private SQLiteDatabase database;
    private static EmployeeDAO instance;
 
    public static EmployeeDAO getInstance() {
        return instance;
    }
 
 
    public synchronized void init(SQLiteDatabase database) {
        instance = new EmployeeDAO();
        this.database = database;
    }
 
    public void saveEmployee(Employee employee) {
        //TODO
    }
 
    public List<Employee> getEmployers() {
        //TODO
    }
 
    public Employee getById(long id) {
 
    }
 
    public void setChecked(long id, boolean checked) {
        Employee employee = getById(id);
        if (employee != null) employee.setChecked(checked ? 1 : 0);
    }
 
 
}
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
03.09.2015, 00:01  [ТС]     ListView в БД сохранение/восстановление #5
YuraAAA, спасибо, но сложновато что-то для понимания )))
А может как-то через массив из булевых значений?
типа
Java
1
final boolean[] checkedItemsArray = {false, true, false};
Добавлено через 1 час 55 минут
Вообщем вернулся всё-таки к модели данных...
Создал class MyList
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class MyList extends ListActivity  {
 
 
    /** Вызывается, если деятельность создана первый раз. */
 
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        // Создает массив строк, чтобы передать их в ListActivity
        ArrayAdapter<Model> adapter = new InteractiveArrayAdapter(this,
                getModel());
        setListAdapter(adapter);
    }
 
    private List<Model> getModel() {
        List<Model> list = new ArrayList<Model>();
        list.add(get("Linux"));
        list.add(get("Windows7"));
        list.add(get("Suse"));
        list.add(get("Eclipse"));
        list.add(get("Ubuntu"));
        list.add(get("Solaris"));
        list.add(get("Android"));
        list.add(get("iPhone"));
        // Первоначальный выбор одного из элементов
        list.get(1).setSelected(true);
        return list;
    }
 
    private Model get(String s) {
        return new Model(s);
    }
 
 
}

Затем класс Model, который содержит название элемента и его содержимое, если он чекнут.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Model {
   //класс содержит название элемента и его содержимое, если он чекнут.
    private String name;
    private boolean selected;
 
    public Model(String name) {
        this.name = name;
        selected = false;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public boolean isSelected() {
        return selected;
    }
 
    public void setSelected(boolean selected) {
        this.selected = selected;
    }

И адаптер
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class InteractiveArrayAdapter extends ArrayAdapter<Model> {
 
    private final List<Model> list;
    private final Activity context;
 
    public InteractiveArrayAdapter(Activity context, List<Model> list) {
        super(context, R.layout.rowbuttonlayout, list);
        this.context = context;
        this.list = list;
    }
 
    static class ViewHolder {
        protected TextView text;
        protected CheckBox checkbox;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.rowbuttonlayout, null);
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.text = (TextView) view.findViewById(R.id.label);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
            viewHolder.checkbox
                    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
 
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                                     boolean isChecked) {
                            Model element = (Model) viewHolder.checkbox
                                    .getTag();
                            element.setSelected(buttonView.isChecked());
 
                        }
                    });
            view.setTag(viewHolder);
            viewHolder.checkbox.setTag(list.get(position));
        } else {
            view = convertView;
            ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
        }
        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(list.get(position).getName());
        holder.checkbox.setChecked(list.get(position).isSelected());
        return view;
    }
 
 
}

И запутался... Как теперь сохранить, а потом восстановить список с расставленными флажками?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
03.09.2015, 08:31     ListView в БД сохранение/восстановление #6
А чего бы не использовать CursorAdapter? К чему такие сложности?
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 99
03.09.2015, 11:27  [ТС]     ListView в БД сохранение/восстановление #7
Rube, а пример какой-нибудь?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
03.09.2015, 12:52     ListView в БД сохранение/восстановление #8
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class MyCursorAdapter extends SimpleCursorAdapter {
private Cursor c;
private Context context;
private ArrayList<String> list = new ArrayList<String>();
private ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();
 
public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
    super(context, layout, c, from, to);
    this.c = c;
    this.context = context;
    for (int i = 0; i < this.getCount(); i++)
        itemChecked.add(i, false);
}
 
public View getView(final int pos, View inView, ViewGroup parent) {
    if (inView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inView = inflater.inflate(R.layout.your_layout_file, null);
    }
 
    final CheckBox cBox = (CheckBox) inView.findViewById(R.id.bcheck); 
    cBox.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            CheckBox cb = (CheckBox) v.findViewById(R.id.your_checkbox_id);
            if (cb.isChecked())
                itemChecked.set(pos, true);
            else if (!cb.isChecked())
                itemChecked.set(pos, false);
        }
    });
    
    cBox.setChecked(itemChecked.get(pos));
    return inView;
}}
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
03.09.2015, 12:57     ListView в БД сохранение/восстановление #9
Цитата Сообщение от Rube Посмотреть сообщение
final CheckBox cBox = (CheckBox) inView.findViewById(R.id.bcheck);
* * cBox.setOnClickListener(new OnClickListener() {
* * * * public void onClick(View v) {
* * * * * * CheckBox cb = (CheckBox) v.findViewById(R.id.your_checkbox_id);
* * * * * * if (cb.isChecked())
* * * * * * * * itemChecked.set(pos, true);
* * * * * * else if (!cb.isChecked())
* * * * * * * * itemChecked.set(pos, false);
* * * * }
* * });
а что тут происходит?)
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
03.09.2015, 16:40     ListView в БД сохранение/восстановление #10
Цитата Сообщение от YuraAAA Посмотреть сообщение
а что тут происходит?)
Проверка состояния по нажатию CheckBox
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
03.09.2015, 17:13     ListView в БД сохранение/восстановление #11
Amrel, двух разных?)
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
03.09.2015, 17:39     ListView в БД сохранение/восстановление #12
Цитата Сообщение от YuraAAA Посмотреть сообщение
двух разных?)
По клику на CheckBox1 проверяется CheckBox2 зачем? не знаю... Мистика...
Думаю автор ошибся хотел написать так:
Java
1
2
3
4
5
6
7
8
9
10
CheckBox cBox = (CheckBox) inView.findViewById(R.id.bcheck); 
   cBox.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    
    if (cBox.isChecked())
         textView.set("cBox" + true);
       else 
         textView.set("cBox" + false);
     }
   });
я бы написал так:

Java
1
2
3
4
5
6
CheckBox cBox = (CheckBox) inView.findViewById(R.id.bcheck); 
   cBox.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
         textView.set("cBox" + cBox.isChecked());
     }
   });
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2015, 17:59     ListView в БД сохранение/восстановление
Еще ссылки по теме:

Сохранение состояния Checkbox в Listview Android
Динамический интерфейс, восстановление Activity Android
Android Траблы с ListView
Android Восстановление позиции ListView по возвращении из другого Activity
Восстановление SurfaceView Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
03.09.2015, 17:59     ListView в БД сохранение/восстановление #13
Amrel, а я бы написал setOnCheckedChangeListener вместо onClick-a
Yandex
Объявления
03.09.2015, 17:59     ListView в БД сохранение/восстановление
Ответ Создать тему
Опции темы

Текущее время: 10:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru