• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przesyłanie danych między Activity i Fragmentami ViewPager

Object Storage Arubacloud
0 głosów
562 wizyt
pytanie zadane 14 listopada 2016 w Android, Swift, Symbian przez adamek339 Użytkownik (600 p.)

Witam, mam aplikację w której stworzyłem 3 ekrany używając ViewPagera (mam 3 fragmenty  i główne activity).

Mam taki problem iż nie potrafię przesłać danych z activity do danego fragmentu.

Czy ktoś może wie jak to zrobić.

Próbowałem to przesyłać przez bundle ale nie działa :/

 

 

public class MainActivity extends FragmentActivity {
    ViewPager viewPager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        viewPager= (ViewPager) findViewById(R.id.pager);
        viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));






    }






}


class MyAdapter extends FragmentPagerAdapter{


    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int arg0) {

        Fragment fragment=null;
        if(arg0==0){
            fragment=new FragmentA();


        }
        if(arg0==1){
            fragment=new FragmentB();


        }
        if(arg0==2){
            fragment=new FragmentC();


        }
        return fragment;
    }

    @Override
    public int getCount() {
        return 3;
    }


}

 

2 odpowiedzi

0 głosów
odpowiedź 15 listopada 2016 przez KubenQPL Maniak (62,820 p.)
Jeśli to pojedyncze int, stringi itp. to używaj intent.setArguments i we Fragmentach też setArguments. A jeśli to wiecej danych to zastanów się może lepiej zrobić Singletona?
komentarz 15 listopada 2016 przez adamek339 Użytkownik (600 p.)
Problem w tym że próbowałem z Bundle  setArguments w Activity a później łapać to we fragmencie w getArguments ale cały czas aplikacja się wywala i w logach mam że getArguments dostał null object.

Może przez to że używam tego ViewPagera to jakoś inaczej trzeba to zrobić :(   Naprawdę nie mam pomysłu.
komentarz 15 listopada 2016 przez KubenQPL Maniak (62,820 p.)

Ja zawsze używałem FragmentManagera a setArguments dajesz fragmentowi.

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment fragment = new FragmentA();
fragment.setArguments("id", 1);
ft.replace(R.id.rootContainer, fragment);
ft.commit();

 

komentarz 15 listopada 2016 przez KubenQPL Maniak (62,820 p.)
Ale pewnie ja we ViewPagerze ustawisz setArguments dla fragmenta to też zadziała
komentarz 15 listopada 2016 przez adamek339 Użytkownik (600 p.)
ft.replace(R.id.rootContainer, fragment);  co to jest ten rootContainer?

Bo mi na czerwono podkereśla. Czego to jest id?
komentarz 15 listopada 2016 przez KubenQPL Maniak (62,820 p.)
To jest element dziedziczący po ViewGroup w twoim layoucie Activity. Musisz go dodać np FrameLayout, LinearLayout, RelativeLayout
komentarz 15 listopada 2016 przez KubenQPL Maniak (62,820 p.)
I co, działa?
komentarz 16 listopada 2016 przez adamek339 Użytkownik (600 p.)
Nie bo nie wiem gdzie jak mam dodać ten rootContainer
komentarz 16 listopada 2016 przez KubenQPL Maniak (62,820 p.)
W pliku xml twojego Activity np. activity_main.xml
komentarz 16 listopada 2016 przez adamek339 Użytkownik (600 p.)
To mam po prostu stworzyć np Relative Layout i nadać mu id?
komentarz 16 listopada 2016 przez KubenQPL Maniak (62,820 p.)
Tak
komentarz 16 listopada 2016 przez adamek339 Użytkownik (600 p.)
Mógłbyś zerknąć na kod który wrzuciłem. Bo tak jak napisałeś wcześniej że jeśli wrzuce Bundle do viewPagera to sie uda. I działa tylko mam taki problem że jeśl chcę wrzucić dane z poza metody getItem np. z onCreate to wtedy nie wiem jak je tam przekazac...
0 głosów
odpowiedź 16 listopada 2016 przez adamek339 Użytkownik (600 p.)

Teraz przesyłanie działa tylko nie wiem jak przekazać dane z do metody getItem np z onCreate

 

public class MainActivity extends FragmentActivity {
    ViewPager viewPager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ArrayList<String> dane = new ArrayList<String>();

        viewPager = (ViewPager) findViewById(pager);
        viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));

       








    }





    class MyAdapter extends FragmentPagerAdapter {




        public MyAdapter(FragmentManager fm) {
            super(fm);

        }


        @Override
        public Fragment getItem(int arg0) {

            Fragment fragment = null;
            if (arg0 == 0) {
          
                fragment = new FragmentA();

              

                fragment.setArguments(bundle);



            }
            if (arg0 == 1) {
                fragment = new FragmentB();


            }
            if (arg0 == 2) {
           
              String name="Marian" ;
       
                fragment = new FragmentC();

             
                


                Bundle bundle = new Bundle();

               bundle.putString("name", name);
    


                fragment.setArguments(bundle);
    


            }


            if (arg0 == 3) {

                fragment = new FragmenyD();
            }
            return fragment;
        }

        @Override
        public int getCount() {
            return 3;
        }


    }
}

 

komentarz 16 listopada 2016 przez KubenQPL Maniak (62,820 p.)

Przypuśćmy że do Fragmentu przekazujesz jakieś ID, to wtedy robisz zmienną globalną 

int id;

dla klasy Fragmentu, a w onCreate() przypisujesz tej zmiennej wartość z getArguments()

this.id = getArguments().getInt("klucz"); 

 w cudzysłowiu klucz jaki nadałeś w "setArguments()"

Podobne pytania

0 głosów
0 odpowiedzi 107 wizyt
0 głosów
1 odpowiedź 140 wizyt
0 głosów
0 odpowiedzi 108 wizyt

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...