- Google Android — это несложно
- ViewPager. Обновление данных в Fragment.
- ViewPager. Обновление данных в Fragment.
- Re: ViewPager. Обновление данных в Fragment.
- Re: ViewPager. Обновление данных в Fragment.
- Re: ViewPager. Обновление данных в Fragment.
- Re: ViewPager. Обновление данных в Fragment.
- Re: ViewPager. Обновление данных в Fragment.
- Re: ViewPager. Обновление данных в Fragment.
- Re: ViewPager. Обновление данных в Fragment.
- Re: ViewPager. Обновление данных в Fragment.
- Re: ViewPager. Обновление данных в Fragment.
- Android: обновить содержимое фрагмента ViewPager после ввода данных из activity
- 3 ответов:
- Как обновить Android фрагмент из активности?
- 2 ответов
- Обновить фрагмент из ViewPager
- 11 ответов
- Fragment (Фрагменты)
- Зачем?
- Первое знакомство
- Жизненный цикл фрагмента
- Два отдельных фрагмента
Google Android — это несложно
Добро пожаловать на форум сайта
ViewPager. Обновление данных в Fragment.
ViewPager. Обновление данных в Fragment.
Сообщение lamberto » 20 апр 2015, 10:48
Re: ViewPager. Обновление данных в Fragment.
Сообщение TemMax » 21 апр 2015, 22:39
Re: ViewPager. Обновление данных в Fragment.
Сообщение doter.ua » 21 апр 2015, 22:49
fragmentManager.beginTransaction()
.replace(R.id.container, этот_же_фрагмент)
.commit();
П.С. капни в сторону интерфейсов. Обновить по приходу что? конкретный вью? зачем весь экран обновлять?
Re: ViewPager. Обновление данных в Fragment.
Сообщение Mikhail_dev » 21 апр 2015, 23:45
Re: ViewPager. Обновление данных в Fragment.
Сообщение lamberto » 22 апр 2015, 10:30
Re: ViewPager. Обновление данных в Fragment.
Сообщение doter.ua » 22 апр 2015, 10:38
Re: ViewPager. Обновление данных в Fragment.
Сообщение Mikhail_dev » 22 апр 2015, 10:49
Re: ViewPager. Обновление данных в Fragment.
Сообщение lamberto » 22 апр 2015, 10:58
Теперь кусок фрагмента где принимаю.
sample_content_fragment — это FrameLayout который является контейнером.
SlidingTabsColorFragment — класс где берём viewpager и присваиваем adapter. (FragmentStatePagerAdapter)
Вот , как то так.
Re: ViewPager. Обновление данных в Fragment.
Сообщение Mikhail_dev » 22 апр 2015, 11:06
Re: ViewPager. Обновление данных в Fragment.
Сообщение Foenix » 22 апр 2015, 11:14
я бы сделала так. Обновляла бы данные когда они реально обновляются, а потом например, в onResume фрагмента обновляла бы их показ, если они изменились.
Т.е. у тебя кажется в методе
public void callSomePublicMethodBalance(String str) <
state3 = null;
state3 = str;
>
как раз и идет присвоение новых данных? так вот его и вызывать в onResume, только добавить там изменение соотв. текствью. Но чтоб два раза не менялось — завести флаг, или разбить этот метод на два — изменние данных и изменение визуальных компонент.
Источник
Android: обновить содержимое фрагмента ViewPager после ввода данных из activity
Я просто новичок в android, и я изучал это в течение нескольких недель, но я все еще не могу найти способ заставить его работать. : (
У меня есть 4 фрагментные вкладки (созданные динамически) в моей основной деятельности. Я ввожу сумму из подсказки в основной деятельности и сохраняю ее в базе данных. Я хочу обновить значение в первой вкладке после того, как я нажму кнопку OK из приглашения, чтобы получить сумму, сохраненную в базе данных, и отобразить ее на первом фрагменте вкладки.
Как я могу обновить значения в первый счет?
В моем фрагменте у меня есть этот код для отображения данных. Но это только отображает данные изначально, а не после того, как я ввожу сумму от основной деятельности.
Я очень ценю ваши ответы. Заранее спасибо.
EDIT: вот мой полный код для viewBudget:
EDIT: добавлен код на 3-й фрагмент вкладки, основанный на ответе Бхуванеша:
3 ответов:
Вы можете сделать это с помощью интерфейса.
Создайте объект интерфейса в своей деятельности и установите объект из своего фрагмента.
В вашейдеятельности создайте объект Lister следующим образом:
В вашем фрагменте Вы должны установить слушателя следующим образом:
Для обновления содержимого другого фрагмента вашего viewPager переопределите приведенный ниже метод во всех ваших viewPager фрагментах.
Перед этим добавьте в свои фрагменты следующий код onCreate() .
Сначала определите открытый метод во фрагменте, который будет повторно запрашивать базу данных, и обновите пользовательский интерфейс:
Затем добавьте переопределение instantiateItem() к вашему FragmentPagerAdapter и сохраните массив ссылок на фрагменты для всех фрагментов в ViewPager. Вот простой пример:
Затем, когда пользователь использовал диалоговое окно для добавления данных в базу данных, вы можете использовать этот код в действии для обновления фрагмента в первой вкладке (если это одна из активных в данный момент вкладок в базе данных). ViewPager)
Вы можете использовать broadcastReceiver в своем фрагменте и отправлять данные из Activity через broadcasting intent
При сохранении в базу данных в MainActivity отправьте эту широковещательную передачу
А затем для вашего первого фрагмента создайте широковещательный приемник
Вам нужно зарегистрировать эту трансляцию в onCreateView () фрагмента
Вам нужно отменить регистрацию в onDestroy () вашего фрагмента
Вы можете реализовать один и тот же широковещательный приемник для всех ваши фрагменты, где вы хотите обновить список
Источник
Как обновить Android фрагмент из активности?
Я хочу периодически обновлять отображение фрагмента на основе данных, загружаемых из интернета. Я создал таймер и Runnable для периодического извлечения этих данных, а также метод внутри фрагмента, чтобы обновить его, но я не могу понять, как получить ссылку из действия на фрагмент, чтобы обновить его.
у меня есть следующий код, который был в основном сгенерирован мастером проекта Android ADT:
здесь код, используемый для создания вкладок:
Я попытался использовать это решение:
но у меня нет ID фрагмента. Можно ли создавать теги? Если да, то как мне это сделать в данном случае? Другие сообщения SO упоминали пакеты, но я не отправляю данные при создании фрагмента; я хочу, чтобы фрагмент периодически обновлялся по мере того, как данные становятся доступными из действия.
2 ответов
вы не можете дать своим фрагментам тег или идентификатор, но вы можете создать пользовательское свойство в своем классе фрагментов, чтобы пометить их.
когда можно затем цикл через все фрагменты и найти тот, который вам нужен
добавьте общедоступный метод в свой фрагмент, который обновит данные в вашем фрагменте. Поскольку у вас есть ссылка на него сейчас, вы можете просто вызвать его из своей деятельности.
вот что вы могли бы попробовать:
поскольку вы упоминаете обновление фрагмента из действия (с полученными данными), вы можете сделать что-то вроде этого:
в Runnable или AsyncTask вы можете обновить адаптер с полученными данными и в своем фрагменте вызвать метод onDatasetChanged () на адаптере, чтобы он автоматически обновил представление.
Если у вас есть несколько фрагментов, внутри этих фрагментов, можно определить интерфейс и затем позвольте activity реализовать его, а затем переопределить метод. Из этого метода в действии обновите адаптер, который содержит данные. Вам придется сделать адаптер статическим!
Источник
Обновить фрагмент из ViewPager
у меня есть Activity С ViewPager . У меня также есть Dialog это получит список с некоторыми элементами, которые пользователь выберет. Теперь, как я могу обновить Fragment где элементы должны отображаться как новые представления, прикрепленные к этому фрагменту?
это метод, который я хочу использовать для добавления элементов в мой Fragment
11 ответов
обновить фрагмент из ViewPager
вам нужно реализовать getItemPosition(Object obj) метод.
этот метод вызывается при вызове
на ViewPagerAdaper . Неявно этот метод возвращает POSITION_UNCHANGED значение, которое означает что-то вроде этого: «фрагмент там, где он должен быть, поэтому ничего не меняйте.»
Итак, если вам нужно обновить фрагмент вы можете сделать это с:
- всегда возвращает POSITION_NONE С getItemPosition() метод. Это что значит:«фрагмент должен быть всегда воссоздается»
- вы можете создать метод update (), который обновит ваш Фрагмент (фрагмент будет обрабатывать обновления сам)
Пример второго подхода:
и в FragmentPagerAdapter вы сделаете что-то вроде этого:
и если вы выберете первый подход может выглядеть так:
Примечание: стоит подумать о том, какой подход вы будете подбирать.
Я сталкивался с проблемой несколько раз, так что в этом случае всегда избегайте FragmentPagerAdapter и используйте FragmentStatePagerAdapter.
Это работает для меня. Надеюсь, это сработает и для вас.
я реализую демо-версию приложения после ответа Саймона. Только для тех, кто ищет этот вопрос.
вы можете получить доступ к исходному коду на GitHub
в вашем PagerAdapter переопределить getItemPosition
после этого добавить viewPager.getAdapter().notifyDataSetChanged(); этот код, как показано ниже
вы можете обновить фрагмент двумя различными способами:
Первый способ
нужно реализовать getItemPosition(Object obj) метод.
этот метод вызывается при вызове
вы можете найти пример Github и больше информации в этой в должности.
Второй способ
мой подход к обновить фрагменты в viewpager — это использовать setTag() метод для любого экземпляра представления в instantiateItem() метод. Поэтому, когда вы хотите изменить данные или аннулировать представление, которое вам нужно, вы можете вызвать findViewWithTag() метод на ViewPager для извлечения ранее созданного представления и изменения/использования его, как вы хотите, без необходимости удалять/создавать новое представление каждый раз, когда вы хотите обновить какое-либо значение.
вы можете найти пример Github или больше информации в этом в должности:
принятый ответ не понимает, поэтому добавлено простое решение. после долгой борьбы найти рабочее решение.
просто уведомить адаптер, это работает потрясающе,
вызовите этот код, когда вы устанавливаете адаптер и когда вы хотите обновить пользовательский интерфейс.
в вашем фрагменте добавьте этот код для обновить
использовать instanceof для литого контексте.
этот общий код помогает только цели, которые находят решение.
очень просто переопределить метод В фрагмент:
очень простое, но эффективное решение для обновите свои представления фрагментов. Использовать setUserVisibleHint() метод. Он будет вызван, когда фрагмент будет виден пользователю. Там вы можете обновить наш вид ( setText() или setVisibility() etc.)
в моем случае это сработало. Надеюсь, это поможет!
возможно, ваш метод добавления элементов во фрагмент должен быть общественные (помещается в нужный фрагмент) и должен иметь параметр того же типа, что и selectedItems ..
это сделает его видимым из activity, который будет иметь массив selectedItems и вуаля..
p.s. лучше назовите его addItemsFromArray(typeOfSelectedItems[] pSelectedItems) причина имя addItem() вполне undescriptive
Edit: stackoverflow просто предложил аналогичную тему 🙂 Check здесь для детальной идеи реализация.. 🙂
1) Создайте обработчик во фрагменте, который вы хотите обновить.
2) в диалоговом окне Activity/Fragment/, где вы хотите, чтобы был запущен вызов update, получите ссылку на этот обработчик и отправьте сообщение (сообщающее вашему фрагменту об обновлении)
если вы используете Kotlin, вы можете сделать следующее:
1. На первом, вы должны быть create Interface и реализовал его в Fragment
2. Следующий шаг добавить OnPageChangeListener на ViewPager
3. переопределить getItemPosition в своем Adapter
Источник
Fragment (Фрагменты)
Фрагменты немного пугают новичков. Постараюсь объяснить как можно проще, чтобы отдельные фрагменты пазла сложились в единую картину.
Зачем?
Создатели операционной системы Android оказались недальновидными разработчиками. Не посоветовавшись с котами, они разработали систему под маленькие экраны телефонов. Но котам было неудобно пользоваться такими экранами, и тогда придумали планшеты.
Старые программы прекрасно на них запускались, но обнаружилось несколько недостатков. На больших экранах интерфейс выглядел не слишком элегантно, появились большие пустые пространства. И тогда возникла идея объединить два отдельных экрана из смартфона в один экран на планшете. Это самый классический пример применения фрагмента. По сути, это костыль. Возможно, если бы сразу подумали головой, то придумали бы более элегантное решение. Но теперь поздно пить «Боржоми», будем использовать предложенную концепцию.
Фрагменты были представлены в API 11 (Android 3.0), но в целях совместимости была написана специальная библиотека Android Support library для старых устройств. Долгое время существовало два класса Fragment: для новых устройств и для старых устройств. Названия методов и классов были очень похожи, и разработчики часто путались, смешивая в одном проекте два разных несовместимых класса. Спустя некоторое время решили отказаться от странного разделения, класс для новых устройств признали устаревшим, а класс из библиотеки поддержки старых устройств сменил своё полное имя и вошёл в состав AndroidX.
При желании можно было продолжить писать приложения в старом стиле, отслеживая размеры экрана. Но такой код получится слишком сложным. Пришлось бы писать один код для переключения от одной активности к другой при использовании смартфона и другой код, когда взаимодействие между объектами происходит на одном экране в планшете. Чтобы устранить это противоречие, были придуманы фрагменты. Хотя там тоже придётся писать много кода.
Несколько слов о том, как проще воспринимать фрагмент. Считайте, что фрагмент — это тот же компонент как Button, TextView или LinearLayout с дополнительными возможностями. Фрагмент, как и кнопку, нужно поместить на экран активности. Но фрагмент является модульным компонентом и один и тот же фрагмент можно встроить в две разные активности. С кнопкой такой номер не пройдёт. Для каждой активности вы должны создать свою отдельную кнопку, даже если их нельзя будет отличить друг от друга.
Фрагмент также немного похож на активность. Но фрагменты — это не замена активности, они не существуют сами по себе, а только в составе активностей. Поэтому в манифесте прописывать их не нужно. Но в отличие от стандартной кнопки, для каждого фрагмента вам придётся создавать отдельный класс, как для активности.
В составе активности есть специальный менеджер фрагментов, который может контролировать все классы фрагментов и управлять ими. О нём позже.
Фрагменты являются строительным материалом для приложения. Вы можете в нужное время добавить новый фрагмент, удалить ненужный фрагмент или заменить один фрагмент на другой. Точно так же мы собираем пазл — подносим фрагмент кота в общую картину, иногда ошибаемся и тогда заменяем кусочек пазла на другой и т.д.
Фрагмент может иметь свою разметку, а может обойтись без неё. Также у фрагмента есть свой жизненный цикл, во многом совпадающий с жизненным циклом активности. Пожалуй, это единственное сходство с активностью.
Имеются специальные виды фрагментов, заточенные под определённые задачи — ListFragment, DialogFragment и другие, которые изучим в других уроках.
Есть два варианта использования фрагментов в приложении (при желании можно использовать сразу оба варианта). Первый вариант заключается в том, что вы в разметке сразу указываете фрагмент с помощью тега fragment, так же как и с другими компонентами.
Второй вариант использует динамическое подключение фрагмента. Принцип следующий — в разметку помещается макет из группы ViewGroup, который становится контейнером для фрагмента. Обычно, для этой цели используют FrameLayout, но это не обязательное условие. И в нужный момент фрагмент замещает контейнер и становится частью разметки.
Поначалу фрагменты кажутся неудобными, так как количество кода увеличивается. Но если с ними работать постоянно, то станет понятнее их принцип.
Реакция разработчиков на появление фрагментов противоречива. Кто-то активно использует их в своих проектах, а кто-то их не переносит и использует альтернативные варианты. Похоже, в стане Гугла также идёт борьба между двумя группами программистов. Фрагменты постоянно развиваются, меняются и дорабатываются.
Первое знакомство
Для первого знакомства создадим стандартный проект на базе Empty Activity и вручную добавим фрагмент. Итак, после создания проекта выбираем из контекстного меню пакета New | Fragment | Fragment (Blank). В диалоговом окне мастера назначаем имя для фрагмента.
На этом этапе создание нового фрагмента напоминает создание новой активности. Мы создаём новый класс и автоматически генерируется макет для него fragment_cat.xml. Единственное отличие, в манифест ничего не добавляется.
Откроем макет фрагмента и немного отредактируем содержимое, добавив центрирование по центру. Также можно было добавить ImageView с изображением кота. Но не будем пока ничего усложнять.
В res/values/strings.xml содержится ресурс hello_blank_fragment. Изменим текст на что-то понятное:
Приготовления закончены. Осталось добавить фрагмент в активность. Открываем activity_main.xml и добавляем новый элемент.
В элементе fragment в атрибуте android:name указываем полное имя класса фрагмента.
Можно запустить проект и увидеть фрагмент внутри активности.
Жизненный цикл фрагмента
У фрагмента есть жизненный цикл, как у активности. Но число методов цикла гораздо больше. Откроем теперь файла класса фрагмента CatFragment и добавим новый код (выделено жирным).
Чтобы увидеть связь между жизненными циклами фрагмента и активности, добавим логи и в активность.
Снова запускаем проект и смотрим логи.
У фрагментов есть жизненный цикл, который во многом совпадает с жизненным циклом активности, внутри которой они находятся.
Два отдельных фрагмента
Мы научились размещать один фрагмент на экране активности. Ничто не мешает разместить на экране несколько фрагментов, которые являются контейнерами для компонентов. Давайте совместим на одном экране два старых примера — «Hello Kitty» и «Счётчик ворон/котов».
Повторим шаги создания нового фрагмента через готовый шаблон Fragment (Blank) и создадим два новых фрагмента KittyFragment и CounterFragment.
Разметку для KittyFragment копируем из старого примера.
Код также копируем с небольшим отличием. Если в активности мы размещали основной код в методе onCreate(), то для фрагмента используем onViewCreated(). Код шаблона для экономии я опущу.
Для счётчика котов (ворон больше считать не будем) напишем продвинутую версию, которая позволить не только увеличивать показания счётчика, но и уменьшать. В конце концов коты имеют привычку гулять сами по себе и пропадают из поля нашего зрения.
Разметка для фрагмента counter_fragment.xml.
Код для класса CounterFragment. Здесь также мы добавляем весь код в onViewCreated().
Осталось разместить два фрагмента в activity_main.xml.
Запускаем проект и видим два приложения в одном. В верхней части мы здороваемся с котёнком, а в нижней считаем котов. Обратите внимание, что весь код сосредоточился в классах фрагментов, а в MainActivity нам вообще ничего не пришлось писать. Фрагменты работают независимо и мы можем писать код в разных модулях.
Источник