ViewPager. Обновление данных в Fragment.
ViewPager. Обновление данных в Fragment.
Народ подскажите пожалуйста, кто как знает. Как обновлять Fragment во viewpager. т.к. листать что бы обновилось вообще не вариант. Данные в фрагмент идут с класса наследуемого от Broadcastreciver. Что бы поместить данные в фрагмент я просто вызываю через экземпляр public метод фрагмента, таким образом беру данные а вот как обновить по приходу ну никак не пойму. HELP ME PLS!!!
Re: ViewPager. Обновление данных в Fragment.
пересоздать фрагмент?
Re: ViewPager. Обновление данных в Fragment.
fragmentManager.beginTransaction()
.replace(R.id.container, этот_же_фрагмент)
.commit();
П.С. капни в сторону интерфейсов. Обновить по приходу что? конкретный вью? зачем весь экран обновлять?
.replace(R.id.container, этот_же_фрагмент)
.commit();
П.С. капни в сторону интерфейсов. Обновить по приходу что? конкретный вью? зачем весь экран обновлять?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ViewPager. Обновление данных в Fragment.
Пересоздать фрагмент? Шутите?
Кстати, это еще не так просто сделать. ViewPager фиг вам даст это легко сделать. Без понимания его исходников, вам не удастся это сделать.
По теме могу сказать, что какой смысл обновлять фрагмент, которого не видно? Может имеет смысл сохранять информацию в активности и уже при переходе к нужному фрагменту менять ему информацию?
Ну если всё же так хочется, то при создании фрагмента, сохраняйте ссылку на него и сделайте возможность её получить при обращении к ViewPager. Только будьте готовы к тому, что фрагменты могут быть null.
Кстати, это еще не так просто сделать. ViewPager фиг вам даст это легко сделать. Без понимания его исходников, вам не удастся это сделать.
По теме могу сказать, что какой смысл обновлять фрагмент, которого не видно? Может имеет смысл сохранять информацию в активности и уже при переходе к нужному фрагменту менять ему информацию?
Ну если всё же так хочется, то при создании фрагмента, сохраняйте ссылку на него и сделайте возможность её получить при обращении к ViewPager. Только будьте готовы к тому, что фрагменты могут быть null.
Re: ViewPager. Обновление данных в Fragment.
Что это проблема я уже понял просидев над этим 4 дня... насчёт данных ,они и так берутся как надо да вот только что бы они отобразились приходиться листать, что бы произошло пересоздание... а принципиальный вопрос что бы эти данные по приходу обновлялись в Realtime. Представьте себе у вас дома стоит датчик температуры который информацию отсылает о температуре в виде sms, дак вот я его получаю, для этого у меня есть отдельный класс исключения наследуемый broadcastreciver..., там я провожу некоторые операции с текстом sms и вызываю public метод fragment3, тем самым передаю туда string. Все отлично работает, за исключением обновления... и таких фрагментов много где отображается по запросу данные от разных устройств. Если есть более изящное решение... подскажите пожалуйста!
Re: ViewPager. Обновление данных в Fragment.
Что ты обновляешь? какое вью? скинь код этого экрана целиком (джава, можно хмл в добавок)lamberto писал(а):Что это проблема я уже понял просидев над этим 4 дня... насчёт данных ,они и так берутся как надо да вот только что бы они отобразились приходиться листать, что бы произошло пересоздание... а принципиальный вопрос что бы эти данные по приходу обновлялись в Realtime. Представьте себе у вас дома стоит датчик температуры который информацию отсылает о температуре в виде sms, дак вот я его получаю, для этого у меня есть отдельный класс исключения наследуемый broadcastreciver..., там я провожу некоторые операции с текстом sms и вызываю public метод fragment3, тем самым передаю туда string. Все отлично работает, за исключением обновления... и таких фрагментов много где отображается по запросу данные от разных устройств. Если есть более изящное решение... подскажите пожалуйста!
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ViewPager. Обновление данных в Fragment.
Зачем обновлять данные, которые никому не видны????????!
Вы не можете гарантировать того, что невидимый фрагмент не будет прибит системой из-за нехватки памяти, так что забудьте. Андроид это не бесконечная память, где можно обновлять всё что угодно, не думая даже о том, что это что-то могло выгрузиться андроидом.
Вы не можете гарантировать того, что невидимый фрагмент не будет прибит системой из-за нехватки памяти, так что забудьте. Андроид это не бесконечная память, где можно обновлять всё что угодно, не думая даже о том, что это что-то могло выгрузиться андроидом.
Re: ViewPager. Обновление данных в Fragment.
И так по порядку.
Класс. BroadcastReciver.
Кусок приёма, обработки, отдачи фрагменту.
Теперь кусок фрагмента где принимаю.
Вот кусок MainActivity
sample_content_fragment - это FrameLayout который является контейнером.
SlidingTabsColorFragment - класс где берём viewpager и присваиваем adapter. (FragmentStatePagerAdapter)
Вот , как то так.
Класс. BroadcastReciver.
Кусок приёма, обработки, отдачи фрагменту.
Код: Выделить всё
if (message.contains(Maskbalance)) {
result3 = message.substring(8,11);
// Log.d(LOG_TAG, "Результат цикла1: " + result3);
for (;;){
if (result3.contains(Masktemp1_1)){
break;
}
else {
result3 = null;
result3 = message.substring(8,r);
r++;
}
}
resultb = result3.replace("r.","p.");
r=11;
myfragment4.callSomePublicMethodBalance(resultb);
}Теперь кусок фрагмента где принимаю.
Код: Выделить всё
public class Fragment4 extends Fragment {
....
...
public void callSomePublicMethodBalance(String str){
state3 = null;
state3 = str;
}
.....
....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment4, container, false);
Button btnzb = (Button) view.findViewById(R.id.button9);
Button btnztod = (Button) view.findViewById(R.id.button11);
Button btnztgd = (Button) view.findViewById(R.id.button10);
TextView txtzagb = (TextView) view.findViewById(R.id.zprb);
TextView txtzagt = (TextView) view.findViewById(R.id.zprt);
TextView txtsetb = (TextView) view.findViewById(R.id.setb);
TextView txtsetgd = (TextView) view.findViewById(R.id.setgd);
TextView txtsetod = (TextView) view.findViewById(R.id.setod);
txtsetgd.setText(state1);
txtsetod.setText(state2);
txtsetb.setText(state3);
далее обработчики кнопок.
Код: Выделить всё
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
SlidingTabsColorsFragment fragment = new SlidingTabsColorsFragment();
transaction.replace(R.id.sample_content_fragment,fragment);
transaction.commit();
}
}SlidingTabsColorFragment - класс где берём viewpager и присваиваем adapter. (FragmentStatePagerAdapter)
Вот , как то так.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ViewPager. Обновление данных в Fragment.
И что это даёт? Кстати SlidingTabsColorFragment - его в коде нету. Вы так и не ответили
Зачем обновлять данные, которые никому не видны????????!
Re: ViewPager. Обновление данных в Fragment.
я бы сделала так. Обновляла бы данные когда они реально обновляются, а потом например, в onResume фрагмента обновляла бы их показ, если они изменились.
Т.е. у тебя кажется в методе
public void callSomePublicMethodBalance(String str){
state3 = null;
state3 = str;
}
как раз и идет присвоение новых данных? так вот его и вызывать в onResume, только добавить там изменение соотв. текствью. Но чтоб два раза не менялось - завести флаг, или разбить этот метод на два - изменние данных и изменение визуальных компонент.
Т.е. у тебя кажется в методе
public void callSomePublicMethodBalance(String str){
state3 = null;
state3 = str;
}
как раз и идет присвоение новых данных? так вот его и вызывать в onResume, только добавить там изменение соотв. текствью. Но чтоб два раза не менялось - завести флаг, или разбить этот метод на два - изменние данных и изменение визуальных компонент.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: ViewPager. Обновление данных в Fragment.
Вот класс SlidingTabsColorFragment
Почему данные не видны в фрагменте есть кнопки и textview одна из кнопок запрос температуры и в этом же фрагменте должно показаться температура в textview. без всяких там перелистований)) вот
xml фрамента
Код: Выделить всё
public class SlidingTabsColorsFragment extends Fragment {
static int mTabsPosition = 0;
static class SamplePagerItem {
private final CharSequence mTitle;
private final int mIndicatorColor;
private final int mDividerColor;
SamplePagerItem(CharSequence title, int indicatorColor, int dividerColor) {
mTitle = title;
mIndicatorColor = indicatorColor;
mDividerColor = dividerColor;
}
CharSequence getTitle() {
return mTitle;
}
int getIndicatorColor() {
return mIndicatorColor;
}
int getDividerColor() {
return mDividerColor;
}
}
static final String LOG_TAG = "SlidingTabsColorsFragment";
private SlidingTabLayout mSlidingTabLayout;
static public ViewPager mViewPager;
static public List<SamplePagerItem> mTabs = new ArrayList<SamplePagerItem>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTabs.add(new SamplePagerItem(
getString(R.string.tab_stream),
Color.BLUE,
Color.GRAY
));
mTabs.add(new SamplePagerItem(
getString(R.string.tab_messages),
Color.RED,
Color.GRAY
));
mTabs.add(new SamplePagerItem(
getString(R.string.tab_photos),
Color.YELLOW,
Color.GRAY
));
mTabs.add(new SamplePagerItem(
getString(R.string.tab_notifications),
Color.GREEN,
Color.GRAY
));
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_sample, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
mViewPager.setAdapter(new SampleFragmentPagerAdapter(getChildFragmentManager()));
mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
mSlidingTabLayout.setViewPager(mViewPager);
mSlidingTabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return mTabs.get(position).getIndicatorColor();
}
@Override
public int getDividerColor(int position) {
return mTabs.get(position).getDividerColor();
}
});
}
xml фрамента
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Запрос баланса"
android:id="@+id/zprb"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/button9"
android:layout_alignStart="@+id/button9" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="___"
android:id="@+id/setb"
android:textSize="18dp"
android:layout_alignBottom="@+id/button9"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="false"
android:layout_marginBottom="10dp"
android:layout_toLeftOf="@+id/button9"
android:layout_toStartOf="@+id/button9"
android:textAlignment="center" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Запрос температуры"
android:id="@+id/zprt"
android:layout_marginTop="41dp"
android:layout_below="@+id/button9"
android:layout_alignLeft="@+id/button9"
android:layout_alignStart="@+id/button9" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="___"
android:id="@+id/setgd"
android:textSize="18dp"
android:layout_alignBottom="@+id/button10"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="false"
android:layout_marginBottom="10dp"
android:textAlignment="center"
android:layout_toLeftOf="@+id/button10"
android:layout_toStartOf="@+id/button10" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/setod"
android:layout_alignBottom="@+id/button11"
android:layout_alignStart="@+id/setgd"
android:layout_alignParentTop="false"
android:textSize="18dp"
android:text="___"
android:layout_alignParentLeft="true"
android:layout_marginBottom="10dp"
android:layout_alignParentStart="false"
android:textIsSelectable="false"
android:textAlignment="center"
android:layout_toLeftOf="@+id/button11"
android:layout_toStartOf="@+id/button11" />
<Button
android:layout_width="270dp"
android:layout_height="wrap_content"
android:text="Запрос баланса"
android:id="@+id/button9"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="25dp"
android:background="@color/btnzapros1_2" />
<Button
android:layout_width="270dp"
android:layout_height="wrap_content"
android:text="Запрос температуры ГД"
android:id="@+id/button10"
android:background="@color/btnzapros1_2"
android:layout_below="@+id/zprt"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_marginTop="140dp" />
<Button
android:layout_width="270dp"
android:layout_height="wrap_content"
android:text="Запрос температуры ОД"
android:id="@+id/button11"
android:background="@color/btnzapros1_2"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_marginTop="200dp" />
</RelativeLayout>- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ViewPager. Обновление данных в Fragment.
Я ничего не понял. Более того, не увидел ответ на свой вопрос, который уже и так повторял.
Re: ViewPager. Обновление данных в Fragment.
Я вроде бы уже не один раз ответил), может криво изъясняюсь, что скорее всего... По поводу данных.
Когда пользователь находится на странице номер 3, это фрагмент 4, там отображается следующая информация button и textview, button - для отправки sms датчику
textview - для отображение результата пришедшего с датчика.
Сорри если опять не ответил на ваш вопрос, скорее всего я его не так понимаю.
Когда пользователь находится на странице номер 3, это фрагмент 4, там отображается следующая информация button и textview, button - для отправки sms датчику
textview - для отображение результата пришедшего с датчика.
Сорри если опять не ответил на ваш вопрос, скорее всего я его не так понимаю.
Re: ViewPager. Обновление данных в Fragment.
По-моему говорится об открытом фрагменте, для обновления которого предлагалось скрольнуть вперед, назад. О каких невидимых штуках идет речь?Mikhail_dev писал(а):Я ничего не понял. Более того, не увидел ответ на свой вопрос, который уже и так повторял.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ViewPager. Обновление данных в Fragment.
писал ранее
сохраняете ссылку на фрагмент в адаптере и обновляете данные.Ну если всё же так хочется, то при создании фрагмента, сохраняйте ссылку на него и сделайте возможность её получить при обращении к ViewPager. Только будьте готовы к тому, что фрагменты могут быть null.
Re: ViewPager. Обновление данных в Fragment.
Не понимаю как нужно сделать, после создание ссылки на фрагмент в адаптере?сохраняете ссылку на фрагмент в адаптере и обновляете данные.
Re: ViewPager. Обновление данных в Fragment.
Да и судя по комментариям почему то создается мнение что я хочу обновить фрагмент которого не вижу, это не так требуется проделать операции с текущем фрагментов на котором нахожусь то есть, обновить его.
Re: ViewPager. Обновление данных в Fragment.
А чем мое объяснение не устроило?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ViewPager. Обновление данных в Fragment.
Код адаптера приведите.lamberto писал(а):Не понимаю как нужно сделать, после создание ссылки на фрагмент в адаптере?сохраняете ссылку на фрагмент в адаптере и обновляете данные.
Re: ViewPager. Обновление данных в Fragment.
Код: Выделить всё
public class SampleFragmentPagerAdapter extends FragmentStatePagerAdapter {
SlidingTabsColorsFragment slid = new SlidingTabsColorsFragment();
public static Fragment4 fragment4;
SampleFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Fragment getItem(int position) {
if (position == 1) {
return Fragment2.newInstance(position);
}
else if (position == 2){
return Fragment3.newInstance(position);
}
else if (position == 3){
fragment4 = Fragment4.newInstance(3);
return fragment4;
}
else
{
return Fragment1.newInstance(position);}
}
private String makeFragmentName(int viewId, int index) {
return "android:switcher:" + viewId + ":" + index;
}
@Override
public int getCount() {
return slid.mTabs.size();
}
@Override
public CharSequence getPageTitle(int position) {
return slid.mTabs.get(position).getTitle();
}
}
