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

Jak dodać wiele Fragmentów (ten sam layout, inna treść) do aktywności?

Object Storage Arubacloud
0 głosów
426 wizyt
pytanie zadane 14 lipca 2017 w Java przez Kubs Mądrala (5,190 p.)
Witajcie,

chce dodać 42 Fragmenty do głównej  aktywności. Jak to zrobić? Czy musze też tworzyć 42 różne Fragmenty xml w layout?

Proszę o wytłumaczenie dla laika :)

1 odpowiedź

0 głosów
odpowiedź 14 lipca 2017 przez KubenQPL Maniak (62,820 p.)
Powiedz najpierw co chcesz zrobić i dlaczego chcesz aż tyle fragmentów takich samych?
komentarz 14 lipca 2017 przez Kubs Mądrala (5,190 p.)

Cześć Kuben,

chcę stworzyć quiz z 42 pytaniami (każdy Fragment będzie zawierał inny tekst i jpg).

Czy ten tok dodawania Fragmentów w MainActivity.java jest dobry?

  viewPager = (ViewPager) findViewById(R.id.fragment_container);
        viewPager.setOnTouchListener(this);


        fragmentList = new ArrayList<>();
        fragmentList.add(new Fragment1());
        fragmentList.add(new Fragment2());
        fragmentList.add(new Fragment3());

 

Możesz też proszę zerknąć na ten post i pomóc?

https://forum.pasja-informatyki.pl/268810/wrapping-text-around-image-jak-zmienic-ten-kod

komentarz 14 lipca 2017 przez KubenQPL Maniak (62,820 p.)

Powinieneś zrobić swoją klasę dziedziczącą po FragmentStatePagerAdapter i zwracać fragmenty w metodzie getItem() tu masz link do przykładu z mojego projektu. Potem robisz instacje tego pager adaptera i przypisujesz do viewPager'a 

viewPager.setAdapter(pagerAdapter);

 

komentarz 16 lipca 2017 przez Kubs Mądrala (5,190 p.)
edycja 16 lipca 2017 przez Kubs

Tak mam mniej więcej ustawione jak Ty

  @Override
    public Fragment getItem(int position) {                                       
        return fragmentList.get(position);      

 

Mam ten sam layout dla wszystkich Fragmentów (jeden Fragment jest na całym ekranie i tak przez 42 ekrany) . Tylko, że popełniłem błąd i utworzyłem 42 osobne Fragmenty.xml a słyszałem, że wystarczy jeden i wpisać w nim informacje o tych pozostałych...

Jak to zrobić?

komentarz 16 lipca 2017 przez KubenQPL Maniak (62,820 p.)
Poprostu ustawiasz layout do fragmentu a potem zmieniasz dane np textView.setText(daneDlaFragmentu)
komentarz 16 lipca 2017 przez Kubs Mądrala (5,190 p.)
Czy możesz podać jakąś stronę, która wyjaśnia dokładniej to co napisałeś powyżej? Nie wiem dokładnie co zrobić żeby podążyć za Twoimi wskazówkami.

Nigdzie w necie nie udaje mi się znaleźć nic na temat pracy z Fragmentami, które ułożone są w ten sposób - 1 Fragment jako cały layout strony i tak przez 42 razy ( 42 screeny)
komentarz 16 lipca 2017 przez KubenQPL Maniak (62,820 p.)
https://developer.android.com/training/animation/screen-slide.html

A wstawianie danych jest zależne od tego do jakiego Obiektu widoku się odwołujesz: chcesz zmienić zdjęcie ImageView używasz metody setImageResource, chcesz zmienić tekst TextView używasz metody setText.
komentarz 17 października 2017 przez Kubs Mądrala (5,190 p.)

Cześć Kuben,

podążam Twoimi wskazówkami.. Jak teraz dodawać dynamicznie do każdego Fragmentu obrazki? Na razie mam teksty "Fragment1".. "Fragment2"..itd..

public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;

    private ArrayList<String> strs;

    private FragmentPagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("x","onCreateActivity");


        // create an custom array list of your object class here which you can pass to pager adapter
        strs = new ArrayList<String>();
        strs.add("Fragment 1");
        strs.add("Fragment 2");
        strs.add("Fragment 3");
        strs.add("Fragment 4");
        strs.add("Fragment 5");


        viewPager = (ViewPager) findViewById(R.id.pager);

        adapter = new FragmentPagerAdapter(getSupportFragmentManager(), strs);
        viewPager.setAdapter(adapter);
    }

    public class FragmentPagerAdapter extends FragmentStatePagerAdapter {

        private ArrayList<String> itemData;

        public FragmentPagerAdapter(FragmentManager fm, ArrayList<String> itemData) {
            super(fm);
            this.itemData = itemData;
        }

        @Override
        public int getCount()
        {
            return itemData.size();
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            super.destroyItem(container, position, object);
            Log.i("x","destroyItem");
        }
        @Override
        public Fragment getItem(int position){
        Log.i("x","getItem");
            // pass data to fragment
            Fragment1 f = Fragment1.newInstance(itemData.get(position));
            return f;

        }
    }
}

 

A we Fragment.java używam `bundle`

 

public class Fragment1 extends Fragment {

    public  Fragment1(){}

    String stringValue;

    // static method to create the Fragment1 frag containing string
    public  static Fragment1 newInstance(String str)
    {
        Fragment1 slider=new Fragment1();
        Bundle b=new Bundle();
        b.putString("stringValue", str);
        slider.setArguments(b);
        return slider;
    }

 

Podobne pytania

0 głosów
0 odpowiedzi 97 wizyt
pytanie zadane 25 marca 2017 w Java przez Szymon Ciamaga Obywatel (1,980 p.)
0 głosów
2 odpowiedzi 187 wizyt
pytanie zadane 21 sierpnia 2017 w Java przez Kubs Mądrala (5,190 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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!

...