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

Обновление фрагмента с ListView в ViewPager - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Обработка нажатий внутри класса адаптера http://www.cyberforum.ru/android-dev/thread1240891.html
Можно ли обрабатывать нажатия в классе адаптера expandablelistview? Если нет, то что будет если я поставлю там обработчики?
Программирование Android Data Base in android Создал класс базы данных, создаю в MainActivity экземпляр класса базы, но при запуске выдаетс ошибка source not found класс базы данных import android.content.Context; import... http://www.cyberforum.ru/android-dev/thread1240857.html
Программирование Android SQLite "Error inserting"
Добрый вечер. Создаю приложение "Обучалку слов анг-рус", не суть важно) Посоветовали мне тут на форуме закинуть словари, в которых хранятся слова и переводы, в SQLite. Для более легкого доступа....
Программирование Android Поставить свою картинку в Spinner (выпадающий список)
На кнопки уже понял как ставить свою картинку(и на нажатие и тд). А вот выпадающий список не знаю. Там есть свойство background у самого спинера, только оно ничего не дает. По сути там "выпадают" те...
Программирование Android Научите пользоваться YouTube API http://www.cyberforum.ru/android-dev/thread1240811.html
Я хочу написать софтину, которая сможет осуществлять поиск видео на YouTube. Когда я попытался разобраться с API ютуба возникла куча проблем: 1. Проще всего оказалось найти на ютубе апи v2. Этот...
Программирование Android Android studio не получается создать .apk Приветствую, после перехода с eclipse проблема с запуском приложения в android studio, и созданием Apk файла. Запустить не получается, потому что в конфигурации ошибка Error: Module not specified .... подробнее

Показать сообщение отдельно
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071

Обновление фрагмента с ListView в ViewPager - Программирование Android

11.08.2014, 15:03. Просмотров 1462. Ответов 4
Метки (Все метки)

Есть класс фрагмента, который заполняет адаптер:
Кликните здесь для просмотра всего текста
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
90
91
92
93
94
95
96
public class PageFragment extends Fragment implements LoaderCallbacks<Cursor> {
    private static final int ADD_REMOVE_FAVORITE = 1;
    static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
    static ListView listView;
    int pageNumber;
    public DB db;
    SimpleCursorAdapter scAdapter;
    Cursor cursor;
 
    static PageFragment newInstance(int page) {
        PageFragment pageFragment = new PageFragment();
        Bundle arguments = new Bundle();
        arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
        pageFragment.setArguments(arguments);
        return pageFragment;
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {        
        View view = inflater.inflate(R.layout.fragment, null);      
        String[] from = new String[] { DB.COLUMN_RES_NAME };
        int[] to = new int[] { R.id.tvText1 };      
        db = new DB(this.getActivity());
        db.open();      
        cursor = db.getData(pageNumber);        
        scAdapter = new SimpleCursorAdapter(getActivity(), R.layout.item, cursor, from, to, 0);
        listView = (ListView) view.findViewById(R.id.listView1);
        listView.setAdapter(scAdapter);     
        registerForContextMenu(listView);
        return view;
    }
 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);       
        AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo;        
        menu.add(0, ADD_REMOVE_FAVORITE, 0, 
            (db.getFav(acmi.id) == 0 ? R.string.add_to_favorite : R.string.remove_from_favorite));
    }   
    
    public boolean onContextItemSelected(MenuItem item) {     
        if (item.getItemId() == ADD_REMOVE_FAVORITE) {
          AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();
// проверка записи на избранное
          int i = item.getTitle().equals(getString(R.string.add_to_favorite)) ? 1 : 0;       
          db.addRemoveFromFavorite(acmi.id, i);  // добавить/удалить из БД  
          cursor = db.getData(pageNumber); // получить записи из БД
          scAdapter.changeCursor(cursor);   
          scAdapter.notifyDataSetChanged(); // не срабатывает если листаю на + 2 страницы    
          return true;
        }
        return super.onContextItemSelected(item);
      }
    
    public void onDestroy() {       
        db.close();
        super.onDestroy();
    }
 
    public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
        return new MyCursorLoader(getActivity(), db);
    }
 
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        scAdapter.swapCursor(cursor);
    }
 
    public void onLoaderReset(Loader<Cursor> loader) {
    }
 
    static class MyCursorLoader extends CursorLoader {
        DB db;
        public MyCursorLoader(Context context, DB db) {
            super(context);
            this.db = db;
        }
        @Override
        public Cursor loadInBackground() {
            Cursor cursor = db.getAllData();
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                this.db.close();
            }
            return cursor;
        }
    }
}

Проблема в обновлении записей (метод onContextItemSelected).
Первая страница в ViewPager - Избранное. Когда я добавляю запись из второй страницы через контекстное меню, листаю влево (на избранное) - запись появилась. Удаляю из избранного (через контекстное меню) - запись исчезла.
Но стоит добавить в избранное запись с третьей страницы (она тоже появится в избранном, тут все норм), то теперь при удалении - ListView не обновляется.
Подозрение на public DB db, может его в каждом методе open/close делать?

Добавлено через 15 часов 55 минут
Вобщем выкинул 2 строки и все заработало, а то уже register DataSetObserver начал изучать))
Java
1
2
// scAdapter.notifyDataSetChanged();
// return true;
Может кто еще подскажет про ошибку?
SQLiteDatabase
close() was never explicitly called on database
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru