webentwicklung-frage-antwort-db.com.de

Datenaustausch zwischen Fragmenten und Aktivität in Android

Ich habe schon eine ähnliche Frage gestellt und keine Antwort bekommen und viele andere Leute suchen nach einer Antwort. Ich poste diese Frage, um hoffentlich eine klare Antwort zu erhalten, von der jeder profitieren kann.

Ich habe eine Aktivität mit 2 Fragmenten. Ich möchte, dass fragment2 eine boolesche Variable in Activity setzt, wenn ein Kontrollkästchen aktiviert ist, damit fragment1 wissen kann, ob das Kontrollkästchen aktiviert wurde.

Das ist mein Code:

Aktivität:

public class modestab extends Activity{
    public static Context appContext;

    public boolean lf=false;

    public void onCreate(Bundle savedInstanceState){
        appContext=this;
super.onCreate(savedInstanceState);
ActionBar tabbar= getActionBar();
        tabbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.Tab ModesTab =tabbar.newTab().setText("Modes");
        ActionBar.Tab CatTab =tabbar.newTab().setText("Categories");

        Fragment ModesFragment =new modes();
        Fragment CatFragment =new cats();

        ModesTab.setTabListener(new MyTabsListener(ModesFragment));
        CattTab.setTabListener(new MyTabsListener(CatFragment));

        tabbar.addTab(ModesTab);
        tabbar.addTab(CatTab);


    }

Fragment 1: (Wo ich den booleschen Wert lesen möchte, wenn oben in Akitivität eingestellt:

@TargetApi(11)
public class tabmodes extends Fragment{
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
View V=inflater.inflate(R.layout.tab_modes, container, false);
button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(lf==false) //lf here is the lf in Activity which I want to get

Fragment 2: Wo ich lf in Activity setzen möchte

.....
lifecheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
              @Override
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {
                  if(lifecheck.isChecked())
                      getActivity().lf=true;//Where I want to set the lf flag in Activity
                  ;
              }
          });

Der Code wird nicht kompiliert, und ich weiß nicht, wie ich die Aktivität einstellen oder lesen soll. Jemand schlug vor, dass ich getActivity () mache, aber ich kann die Variable nicht sehen.

Ich habe versucht, eine Funktion setlf (boolean jk) zu erstellen, aber ich kann sie auch nicht sehen ...

Jede Hilfe ist willkommen :)

31
Syntax_Error

Viele Möglichkeiten :

1) Aktivität -> Fragment

2) Aktivität -> Fragment

  • In Ihrem Fragment: Erstellen Sie eine öffentliche Methode

  • In Ihrer Aktivität: Rufen Sie eine öffentliche Methode mit active -Fragment auf:

    getSupportFragmentManager () . findFragmentById (R.id.Ihr_Fragment) .publicMethod (args)

3) Fragment -> Aktivität

  • In your Fragment: Eine un-Schnittstelle mit Getter- und Setter-Methoden erstellen ( Callback-Methoden )
  • In Ihrer Aktivität: Implementieren Sie die Schnittstelle

4) Fragment -> Aktivität

  • In Ihrer Aktivität: Erstellen Sie einen öffentlichen Getter und Setter oder andere Methoden
  • In Ihrem Fragment: Öffentlicher Aktivitäts-Getter, Setter oder andere Methoden, die Folgendes verwenden:

    getActivity () . getSomething (), getActivity () . setSomething (args) oder getActivity () . someMethod (args)

110
Alain Beauvois

Sie können Daten zwischen Fragmenten auf zwei Arten übergeben: 

Zuerst können Sie dies tun, indem Sie setArguments (...) und getArguments (....) verwenden.

Zweitens können Sie dies mit Rückruf tun

2

Sie können auch EventBus verwenden. Es ist wirklich einfach https://github.com/greenrobot/EventBus

Verwenden Sie auf keinen Fall statische Methoden wie meine alte Antwort :)

1
Mete