Jak dodać do fragmentów różne dane z xml i dynamicznie je podmieniać?

0

Witajcie,
w tym kodzie mam pięć Fragmentów (tzn. wyświetlane są w jednym Fragmencie) przesuwanych prawo-lewo. Chcę, żeby za każdym razem jak przesunę Fragment wyświetlany był - tekst, radio buttony, i obrazek ALE w każdym Fragmencie mają być umieszczone inne dane. Layout jest wszędzie taki sam.

Jak to napisać programowo?

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

        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);
        }
        @Override
        public Fragment getItem(int position) {
           
            Fragment1 f = Fragment1.newInstance(itemData.get(position));
            return f;
        }
    }
}
0

W getItem przekazujesz position czyli numer wyświetlanego fragmentu. Dzięki temu we w fragmencie w metodzie init możesz odebrać ten numerek i wiesz jakie dane masz teraz wyświetlić.

0

Odpisuj w postach, a nie w komentarzach.

Zrób w swoim fragmencie TextView, a w momencie tworzenia fragmentu używaj metody setText() żeby podmieć tekst. Jaki tekst wstawić wiesz na podstawie position, który odbierasz za pośrednictwem metody init.

0

A czy w tym przypadku mogę też przekazywać obiekty używając bundle oraz zaimplementować interfejs Parcelable?

0

getItem() oczekuje parametru z typem int, ale do metody tworzącej fragment możesz przekazać Bundle.

0

Ale jak przez jedno TextView (część xml tego jedynego fragmentu) przekazać różnego rodzaju stringi, osobno dla każdego kolejno wyświetlanego layoutu we fragmencie ?

0

TextView ma metodę setText(), za pomocą której możesz podmieniać text w zależności od tego, którą stronę user ogląda.

0

Cześć Haskell,

próbuje zastosować tą metodę w sposób jaki podałeś, ale niestety nie wychodzi mi to. Czy mógłbyś dać przykład tego jak użyć ten setText() do pobrania/podmienienia textView, imageView oraz RadioButtons w powyższym kodzie z pierwszego postu? Dziękuje.

0

Cześć Haskell,
a jak wygląda ta metoda init we Fragmencie?

Tak na marginesie we Fragmencie używam bundle. Czy do tego kodu dopisuje image i radiobuttony żeby przesłać do MainActivity?

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1