Przesyłanie danych z activity do Fragmentu

0

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


} 
0

gdzie próbowałeś przez Bundle ?

0

W onCreat Activity miałem coś takiego :

  String tekstdlaA="Dla A";
        Bundle doFragmetuA = new Bundle();
        doFragmetuA.putString("na", tekstdlaA);

        FragmentA frag = new FragmentA();
        frag.setArguments(doFragmetuA); 

A później w onCreatView we FragmencieA próbowałem to odebrać w ten sposób:
String odbierz =getArguments().getString("na");

0

tak to nie zadziała( w sumie nie wiem czemu ale tak już jest ) . Wygeneruj sobie fragment automatycznie w android studio, tam masz takie 2 opcje przy tworzeniu , zaznacz "Include fragment factory methods" i zobacz jak jest przekazywane bundle do fragmentu.

0

O te metody chodzi? :)

 // TODO: Rename and change types and number of parameters
    public static FragmenyD newInstance(String param1, String param2) {
        FragmenyD fragment = new FragmenyD();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    public FragmenyD() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
0

tak

0

I teraz w Activity wystyłam tak samo a we fragmencie łapie w którejś z tych metod? Przez getArguments?

0

Kurcze też nie działa albo ja to źle robię....

0

Wrzuciłem to do metody w Viewpagerze i działa tylko teraz mam problem taki że ja chce wysłać kilka Stringów do fragmentu. Wie ktoś jak to zrealizować?

import android.app.FragmentTransaction;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

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) {
            String ala="ala";
            fragment = new FragmentA();

            Bundle bundle = new Bundle();
            bundle.putString("id", ala);


            fragment.setArguments(bundle);



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


        }
        if (arg0 == 2) {

            String name="Marian";
            String surname="Kowalski";
            fragment = new FragmentC();


            Bundle bundle = new Bundle();
            Bundle bundle1=new Bundle();
            bundle.putString("name", name);
            bundle1.putString("surname",surname);

            fragment.setArguments(bundle);
           // fragment.setArguments(bundle1);


        }


        if (arg0 == 3) {

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

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


}

}

1

wrzucaj kod w tagi, mozesz przekazać listę lub tablicę stringów do Bundle

0

Przepraszam zapomniałem o tagach, tylko jak to później odebrać :/

1

masz we fragmencie

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);

            List<String> strings = getArguments().getStringArrayList(TUTAJ_TWOJ_PRARAM)
        }
0

Teraz znowu mam inny problem :( Wszystko działa jeśli lista lub Stringi które chce przekazać są tworzone w metodzie public Fragment getItem(int arg0). A w jaki sposób przekazać do tej metody np arrayliste z klasy MainActivity?

 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) {
                ArrayList<String> lista = new ArrayList<String>();
                String name="Marian" ;
                String surname="Kowalski";
                fragment = new FragmentC();

                lista.add(name);
                lista.add(surname);


                Bundle bundle = new Bundle();

               // bundle.putString("name", name);
                bundle.putStringArrayList("lista",lista);


                fragment.setArguments(bundle);
               // fragment.setArguments(bundle1);


            }


            if (arg0 == 3) {

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

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


    }
}
0

Możesz trochę bardziej to wyjaśnic?

0

nie

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