2016-08-02 12 views
0

Ich habe eine App, die eine MainActivity und zwei Fragmente hat. Diese Fragmente senden Argument MainActivity auf diese Weise:Android - bestimmen Fragment

Bundle args = new Bundle(); 
args.putLong("id",id); 
sf.setArguments(args); 

Und dann MainActivity nimmt Argument in onCreate() Methode

protected void onCreate(Bundle savedInstanceState) { 
    private long wayId = getArguments().getLong("id"); 
} 

Wie kann ich feststellen, welches Fragment dieses Argument zu MainActivity geschickt?

Antwort

1

Sie können ein weiteres Argument wie das Tag des Fragments in das Bündel einfügen.

Bundle args = new Bundle(); 
args.putLong("id",id); 
args.putString("fragmentTag", fragmentTag); 
sf.setArguments(args); 

und retrive den Tag in Ihrem onCreate()

+0

Ich weiß, es, aber gibt es eine Möglichkeit, etwas wie getClass zu verwenden? – gigs

+0

Ja, Sie können this.getClass() verwenden, und wenn der Name der Fragmentklasse eindeutig ist, können Sie diesen als Bezeichner verwenden. – br00

+0

Oder Sie können fragment.getTag() verwenden, aber Sie müssen das Tag während der Erstellung des Fragments zuweisen, so wie fragmentTransaction.add (R.id.fragment_container, fragment, "your_tag"); – br00

1

Sie einen separaten inrterface für jedes Fragment definieren

public class FragmentA extends Fragment { 
    public static interface FragmentAInterface { 
     void doSomething(String data); 
    } 
} 
public class FragmentB extends Fragment { 
    public static interface FragmentBInterface { 
     void doSomething(String data); 
    } 
} 

Und dann in Ihrer Aktivität:

public class MyActivity extends AppCompatActivity implements FragmentA.FragmentAInterface, FragmentB.FragmentBInterface{ 

    @Override 
    public void doSomething(String data) { 
     //Guaranteed to come from Fragment A 
    } 

    @Override 
    public void doOtherThing(String data) { 
     //Guaranteed to come from Fragment B 
    } 
}