2016-10-22 16 views
0

Also muss ich Zugriff auf eine Variable von MainActivty aus einer anderen Klasse haben. was ist der beste Weg, dies zu tun. Im Folgenden ist das Szenario, aber ich kann nicht nennen frag.receiveInt(give_this_int_to_fragment);Zugriff var von MainActivity in einer anderen erweiterten Klasse

MainActivity.java:

import com.me.fragments.FragmentExtender 

    public class MainActivity{ 
     int give_this_int_to_fragment; 

     protected void onCreate(...){ 
      Fragment frag = new FragmentExtender(); 
      give_this_int_to_frag = new int(); 
      frag.receiveInt(give_this_int_to_frag); 
     } 
    } 

FragmentExtender.java:

public class FragmentExtender extends Fragment{ 
     int receive_int_from_main; 

     public View onCreateView(...){...} 

     receiveInt(int_from_main){ 
       receive_int_from_main = int_from_main; 
     } 
    } 

Ich versuche nicht, eine doppelte Variable zu erstellen, nur einen Zeiger auf diese Variable in MainActivity, wenn Sie meinen Drift fangen.

+0

Sie möchten also Wert von Aktivität zu Fragment übergeben? –

+0

Ja. Zu denen, die geantwortet haben, werde ich beide Versionen ausprobieren und sehen, was am besten für meinen Workflow funktioniert. Ich werde zurück zur Upvote sein. – John

Antwort

3

erstellen Getter und Setter für diese Variable in Aktivität

public class MainActivity{ 
    int give_this_int_to_fragment; 

    protected void onCreate(...){ 
     Fragment frag = new FragmentExtender(); 

    } 
} 

public int getgive_this_int_to_fragment(){ 
    return give_this_int_to_fragment; 
} 
public void getgive_this_int_to_fragment(int var){ 
    give_this_int_to_fragment = var; 
} 

in Fragment Jetzt können Sie getActivity() verwenden, Aktivitätskontext zu erhalten und rufen Sie dann Getter

public class FragmentExtender extends Fragment{ 


    public View onCreateView(...){ 
     //.... 
     int var = ((MainActivity) getActivity()).getgive_this_int_to_fragment(); 

    } 
} 
0

Die elegantere Weise wird sei es, eine Schnittstelle in das Fragment zu implementieren und die App davon zu erben. So können Sie auf diese Weise kommunizieren.

interface FragmentInterface{ 
    Object getMainValue(); 
    void passValueToMain(Object obj); 
} 

Mit diesem Code, haben Sie es nur an den Konstruktor MainActivity Erklärung und in dem Fragment

public class MainActivity implements FragmentInterface{ 
    int give_this_int_to_fragment; 

    protected void onCreate(...){ 
     Fragment frag = new FragmentExtender(); 
     .... 
    } 
} 

Und dann in dem Fragment

public class FragmentExtender extends Fragment{ 
    private FragmentInterface mInterface; 
    int receive_int_from_main; 

    public View onCreateView(...){...} 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     setListeners(context); 
    } 

    //This is for pre Marshmallow versions 
    @SuppressWarnings("deprecation") 
    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
      setListeners(activity); 
     } 
    } 

    private void setListeners(Object object) { 
     if (object instanceof FragmentInterface) { 
      mListener = (FragmentInterface) object; 
     } else { 
      throw new RuntimeException(object.toString() 
       + " must implement FragmentInterface"); 
     } 
    } 
} 

Diese für jede funktioniert hinzufügen Fragment und jede Aktivität, die sie implementieren

+0

Gibt es eine Möglichkeit, die Fragmentklassendatei nicht zu bearbeiten? Ich möchte die Dinge in zwei Dateien behalten MainActivity und FragmentExtender – John

+0

Sie können den FragmentListener in derselben FragmentExtender-Klasse erstellen, aber auf diese Weise ist es nicht so einfach, ihn in anderen Fragmenten wiederzuverwenden – zon7

Verwandte Themen