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

ViewPager и ListView - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Геопозиционирование по определенным условиям http://www.cyberforum.ru/android-dev/thread858163.html
Принципиальная реализуемость следующего: Мобильное приложение, позволяющее отбирать пользователей этого же приложения по-близости по определенным критериям (тегам), которые пользователь вбил при...
Программирование Android Построение "длинного" layout экрана через scrollview Здравствуйте. Не могу совладать с таким эллементом как scrollview. Мне на экране нужно расположить scrollview в котором будет текст и несколько кионок с кнопками, но располагаться они должны ниже... http://www.cyberforum.ru/android-dev/thread858155.html
Типы данных SQLite Программирование Android
Здравствуйте Не могу понять прекрасы SQLite. Если верить мануалам, то в SQLite нет такого типа данных, как long. Есть integer. Но что самое интересное, при создании таблиц запись типа "create table...
Программирование Android Помоги разобраться с логами
Я новичок, поэтому строго не судите, а помоги разобраться. Вот первый лог java.lang.IllegalStateException: Could not execute method of the activity at...
Программирование Android Размещение элементов по краям http://www.cyberforum.ru/android-dev/thread857738.html
Хочу расположить 2 кнопки внизу экрана Назад и Далее. Высота wrap_content а ширина одинаковая и кнопки должны располагаться слева и справа от центра экрана. Подскажите пожалуйста что поставить в...
Программирование Android Что сделать, чтобы eclipse не ругался на R? в строчках на подобии этой: setContentView(R.layout.activity_main); Создаю новый проект и вот такая фигня. подробнее

Показать сообщение отдельно
igrok-vip
0 / 0 / 3
Регистрация: 22.04.2013
Сообщений: 118

ViewPager и ListView - Программирование Android

07.05.2013, 20:15. Просмотров 2529. Ответов 6
Метки (Все метки)

Вообще пытаюсь сделать пролистывающиеся редактируемые списки. Для этого использую ViewPager и ListView.

Так как ViewPager использует фрагмент для отображения на экране, то пытаюсь во фрагменте в onCreateView в зависимости от номера страницы наполнять один и тот же ListView разным содержимым из базы данных при помощи SimpleCursorAdapter.

Редактирование происходит с помощью контекстного меню и DialogFragment'а. В диалоге при нажатии кнопки готово текст из EditText попадает в БД и обновляется курсор для SimpleCursorAdapter, что по сути должно привести к обновлению содержимого в ListView. Но после нажатия Готово в диалоге экран очищается и в эклипсе ошибка:
05-07 09:31:18.646: E/Cursor(1316): Invalid statement in fillWindow()
Если полистать ViewPager на пару страниц в сторону и вернуться назад, то данные обновляются.

Вот код как заполняю ListView

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
 
    View view = inflater.inflate(R.layout.activity_page_fragment, null);
    lvMain = (ListView) view.findViewById(R.id.lvMain);
    al = new ArrayList<String>();
    subj_id = new ArrayList<Integer>();
    group_id = new ArrayList<Integer>();
    stud_id = new ArrayList<Integer>();
 
    
 
    OnCreateContextMenuListener occm1 = new OnCreateContextMenuListener() {
 
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            // TODO Auto-generated method stub
            AdapterContextMenuInfo aMenuInfo = (AdapterContextMenuInfo) menuInfo;
            itemselected = aMenuInfo.position;
            id_itemselected = subj_id.get(itemselected);
            
            
            menu.add(Menu.NONE, M_EDIT1, Menu.NONE, "Изменить1");
            menu.add(Menu.NONE, M_DELETE, Menu.NONE, "Удалить1");
            menu.add(Menu.NONE, M_ADD, Menu.NONE, Integer.toString(aMenuInfo.position));
        }
        
    };
    
    OnCreateContextMenuListener occm2 = new OnCreateContextMenuListener() {
 
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            // TODO Auto-generated method stub
            AdapterContextMenuInfo aMenuInfo = (AdapterContextMenuInfo) menuInfo;
            itemselected = aMenuInfo.position;
            id_itemselected = group_id.get(itemselected);
            
            menu.add(Menu.NONE, M_EDIT2, Menu.NONE, "Изменить2");
            menu.add(Menu.NONE, M_DELETE, Menu.NONE, "Удалить2");
            menu.add(Menu.NONE, M_ADD, Menu.NONE, "Добавить2");
        }
        
    };
    
 
        
    
    switch (pageNumber){
    case 0: 
        DBase = new DataBase(getActivity());
        db = DBase.getWritableDatabase();
        c = db.query("subjects", null, null, null, null, null, null);
        int id_subj_ColIndex = c.getColumnIndex("_id");
        c.moveToFirst();
        subj_id.clear();
        do {
            subj_id.add(c.getInt(id_subj_ColIndex));
            } while (c.moveToNext() );
        c.moveToFirst();
        getActivity().startManagingCursor(c);
        String[] from = new String[] {"subject_name"};
        int[] to = new int[] {R.id.tvText};
        scAdapter = new SimpleCursorAdapter(getActivity(), R.layout.item, c, from, to);
        lvMain.setAdapter(scAdapter);
        //adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, al);
        //lvMain.setAdapter(adapter);
        lvMain.setOnCreateContextMenuListener(occm1);
        
        //registerForContextMenu(lvMain); 
        
        db.close();
        
        break;
        
    case 1:
        
        
        
    case 2:
        
        break;
    }
      
    return view;
  }
Вот как изменяю базу

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
public class dialog_edit extends DialogFragment implements OnClickListener {
 
      DataBase DBase;
      SQLiteDatabase db; 
      ContentValues cv;
      EditText ededit;
        
 
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
        getDialog().setTitle("Изменение записи");
        View v = inflater.inflate(R.layout.dialog_edit, null);
        v.findViewById(R.id.btnCancel).setOnClickListener(this);
        v.findViewById(R.id.btnApply).setOnClickListener(this);
        ededit = (EditText) v.findViewById(R.id.ededit);
        return v;
      }
 
      public void onClick(View v) {
        switch (v.getId()){
        case 
        R.id.btnCancel : 
            dismiss();
            break;
        case 
        R.id.btnApply :
            String text = ededit.getText().toString();
            cv = new ContentValues();
            cv.put("subject_name", text);
            DBase = new DataBase(getActivity());
            db = DBase.getWritableDatabase();
            int n_upd = db.update("subjects", cv, "_id = ?", new String [] {Integer.toString(PageFragment.id_itemselected)});
            db.close();
            PageFragment.c.requery();
            dismiss();
            break;
        }
        
      }
}
В чём проблема? Пытался то же самое сделать через обычный адаптер и при изменении данных в БД передавать в ListView адаптер по новой - был тот же результат.

Добавлено через 6 часов 20 минут
Вообщем это происходит из-за обновления курсора c.requery(). Неужели никак нельзя обновить данные в ListView во фрагменте?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru