ViewPager. Обновление данных в Fragment.

Интерфейс, диалоги, темы, стили, меню
Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: ViewPager. Обновление данных в Fragment.

Сообщение Mikhail_dev » 22 апр 2015, 14:45

>return Fragment2.newInstance(position);
>return Fragment3.newInstance(position);
вот эти вещи вы можете сохранить себе в глобальную переменную и к ней обращаться. Только адаптер сделайте внутри ViewPager, в нём же и глобальные переменные. Дальше через get методы дайте доступ к фрагментам. Будет выглядить как-то так
viewPager.getFragment2().someMethod()

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 22 апр 2015, 14:56

Спасибо попробую!

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 22 апр 2015, 18:00

Не помогло, результат приходит, но для обновления всё равно приходиться листать.
вот исходники как я сделал.

Код: Выделить всё

public class SlidingTabsColorsFragment extends Fragment {


   static int mTabsPosition = 0;
  [color=#40FF00] static Fragment4 fragment4;
    static public   Fragment4 getFragment4() {
        return fragment4;
    }[/color]


    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();
            }

        });



    }



     class SampleFragmentPagerAdapter extends FragmentStatePagerAdapter {

        SlidingTabsColorsFragment slid = new SlidingTabsColorsFragment();


        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){

               [color=#80FF00] fragment4 =  Fragment4.newInstance(position);[/color]

                   [color=#80FF00]  return fragment4; [/color]
            }
            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();
        }

    }

вызываю из класса наследуемого от broadcastreciver.
вот кусок.

Код: Выделить всё

 SlidingTabsColorsFragment slid = new SlidingTabsColorsFragment();

                    if (message.contains(Maskbalance)) {
                         result3 = message.substring(8,11);
                       
                        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);
                            slid.getFragment4().callSomePublicMethodBalance(resultb);
                       }

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: ViewPager. Обновление данных в Fragment.

Сообщение Mikhail_dev » 23 апр 2015, 10:44

Не помогло, результат приходит, но для обновления всё равно приходиться листать.
Я не понимаю. Что значит "листать обновления" ? Обновление приходит и делайте что с ним хотите. вот вам ссылка на фрагмент. хотите - обновляйте, хотите - не обновляйте. Что там листать, выдёргивать, мять, съесть, я понятия не имею. Если данные получены и есть ссылка на фрагмент, то изменяйте. Если что-то не так, то используйте логи, смотрите что не так.
Либо запишите видео что не так. я не понимаю ваши проблемы. Данные есть, а листать приходится. Вынос мозга.

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 23 апр 2015, 11:57

Имею ввиду следующее... что когда пришли данные в фрагмент они не отображаются, а отображаютмя только тогда когда обновиться view этого фрагмента, воь именно для этого мне и приходится перелистывать фрагменты что бы обновить view. А я хочу сделать так что бы избежать этой порнографии.
Если снова не понятно постараюсь вечером записать видео.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: ViewPager. Обновление данных в Fragment.

Сообщение Mikhail_dev » 23 апр 2015, 12:10

что когда пришли данные в фрагмент они не отображаются, а отображаютмя только тогда когда обновиться view этого фрагмента
А они никогда сами собой не отобразятся, если вы не напишете соответствующий код для изменения этих View. Покажите тот метод во фрагменте как вы обновляете данные, которые вам приходят.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: ViewPager. Обновление данных в Fragment.

Сообщение Foenix » 23 апр 2015, 12:12

автор, я вам удивляюсь.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 26 апр 2015, 19:23

Foenix писал(а):автор, я вам удивляюсь.
Я порой сам себе удивляюсь)!

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 26 апр 2015, 19:31

В том то и дело я не знаю что должен быть за код для обновления view фрагмента.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: ViewPager. Обновление данных в Fragment.

Сообщение Mikhail_dev » 26 апр 2015, 20:20

крутобл. т.е. вы решили что программа сама поймёт какие данные и где надо обновлять

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 26 апр 2015, 20:33

нет какие данные и откуда брать программа знает, и в фрагменте public методы приводил, как получает фрагмент данные и из какого класса этот метод вызывается...
вопрос остаётся только в том, что бы обновить view фрагмента, что бы отобразился вновь заполненный textview

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: ViewPager. Обновление данных в Fragment.

Сообщение Foenix » 26 апр 2015, 22:11

да не фрагмент надо обновлять
а соотв. textView делать им метод setText всего лишь.
я же объясняла - делаешь публичный метод и там обновляешь все вьюшки. Зачем фрагмент трогать-то?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 26 апр 2015, 22:38

Устал изъяснятся, метод вызывается в setText() записывается результат, так работает но что бы увидеть текст этого textview, приходится листать с текущего фрагмента на фрагмент с position 0 или 1. потому как после поступление данных текущий фрагмент не изменит своего view, а после данных манипуляций меняет.... так вот я хочу избежать этой порнографии.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: ViewPager. Обновление данных в Fragment.

Сообщение Mikhail_dev » 26 апр 2015, 22:40

методом порнографии вы объясняете.
покажите как данные передаются во фрагмент и как вы их изменяете, пир их поступлении.

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 26 апр 2015, 22:49

Из класса наследуемого с BroadCastReciver, вызывается следующий метод:

fragment4.callSomePublicMethodBalance(resultb);

Собственно сам Fragment4 и его метод.

public void callSomePublicMethodBalance(String str){
state3 = null;
state3 = str;
}

И далее в методе onCreateView

нахожу свой TextView
TextView txtsetb = (TextView) view.findViewById(R.id.setb);
ну а далее передаю свой текст "данные"
txtsetb.setText(state3);

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 26 апр 2015, 23:15

Выкладываю видео моей проблемы для большего понимания, чего я хочу добиться!
Вложения
123.rar
Видео
(753.8 КБ) 193 скачивания

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: ViewPager. Обновление данных в Fragment.

Сообщение Mikhail_dev » 26 апр 2015, 23:57

Может проще проект сбросить? я хоть гляну исходники

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 27 апр 2015, 00:04

Есть ли альтернативный способ скинуть исходники?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: ViewPager. Обновление данных в Fragment.

Сообщение Foenix » 27 апр 2015, 00:09

вообще метод фрагмента не правильно вызывать, но черт с ним
в этом методе, а не в методе create нужно обратиться к текствью и сменить им текст.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

lamberto
Сообщения: 66
Зарегистрирован: 29 мар 2015, 23:38

Re: ViewPager. Обновление данных в Fragment.

Сообщение lamberto » 27 апр 2015, 00:12

пробовал и так...
public void callSomePublicMethodBalance(String str){
state3 = null;
state3 = str;
fragment4 = new Fragment4();
fragment4.onResume();

}

@Override
public void onResume() {
super.onResume();
View v = getView();
TextView asd = (TextView) v.findViewById(R.id.setb);
asd.setText(state3);
}

ситуация не меняется...
вроде как Вы и говорите... но можно и без метода onResume

Ответить