Ich sehe im Android Fragments Dev Guide , dass eine "Aktivität Methoden in einem Fragment aufrufen kann, indem ein Verweis auf das Fragment von FragmentManager mit findFragmentById()
oder findFragmentByTag()
abgerufen wird".
Das folgende Beispiel zeigt, wie eine Fragmentreferenz abgerufen wird, nicht jedoch, wie bestimmte Methoden im Fragment aufgerufen werden.
Kann jemand ein Beispiel geben, wie das geht? Ich möchte eine bestimmte Methode in einem Fragment aus der übergeordneten Aktivität aufrufen. Vielen Dank.
die Frage nicht genau bekommen, da es zu einfach ist:
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>();
Update: Für diejenigen, die Kotlin verwenden
var fragment = supportFragmentManager.findFragmentById(R.id.frameLayoutCW) as WebViewFragment
fragment.callAboutUsActivity()
Wenn Sie "Import Android.app.Fragment;" .__ verwenden, verwenden Sie entweder:
1)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
Bei R.id.example_fragment handelt es sich höchstwahrscheinlich um die FrameLayout-ID in Ihrem XML-Layout. ODER
2)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”);
fragment.specific_function_name();
Dabei ist FragTagName der Name, den Sie angegeben haben, als Sie dies getan haben:
TabHost mTabHost.newTabSpec(“FragTagName”)
Wenn Sie "import Android.support.v4.app.Fragment;" verwenden Dann verwenden Sie entweder:
1)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
OR
2)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(“FragTagName”);
fragment.specific_function_name();
Wenn Sie eine Unterstützungsbibliothek verwenden, sollten Sie Folgendes tun:
FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment);
fragment.myMethod();
((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
2. Wenn Sie ein Unterstützungsbibliothek-Fragment verwenden, gehen Sie wie folgt vor:
((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
Ich denke, das Beste ist, zu prüfen, ob Fragment hinzugefügt wird, bevor die Methode in Fragment aufgerufen wird. Tun Sie so etwas, um eine Null-Ausnahme zu vermeiden.
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
if(fragment.isAdded()){
fragment.<specific_function_name>();
}
FragmentManager fm = getFragmentManager();
MainFragment frag = (MainFragment)fm.findFragmentById(R.id.main_fragment);
frag.<specific_function_name>();
Vom Fragment zur Aktivität:
((YourActivityClassName)getActivity()).yourPublicMethod();
Von der Aktivität zum Fragment:
FragmentManager fm = getSupportFragmentManager ();
//if you added fragment via layout xml
YourFragmentClass fragment =
(YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id);
fragment.yourPublicMethod();
Wenn Sie Fragment über Code hinzugefügt und einen tag string verwendet haben, als Sie Ihr Fragment hinzugefügt haben, verwenden Sie stattdessen findFragmentByTag :
YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag");
Ich weiß nichts über Java
, aber in C#
(Xamarin.Android) muss das Fragment nicht jedes Mal nachgeschlagen werden, wenn Sie die Methode aufrufen müssen (siehe unten):
public class BrandActivity : Activity
{
MyFragment myFragment;
protected override void OnCreate(Bundle bundle)
{
// ...
myFragment = new MyFragment();
// ...
}
void someMethod()
{
myFragment.MyPublicMethod();
}
}
public class MyFragment : Android.Support.V4.App.Fragment
{
public override void OnCreate(Bundle bundle)
{
// ...
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
{
// ...
}
public void MyPublicMethod()
{
// ...
}
}
Ich denke in Java
können Sie das gleiche tun.
sie rufen auch die Fragment-Methode über die Schnittstelle like auf
zuerst erstellen Sie eine Schnittstelle
interface name{
void methodname();
}
nach dem Erstellen der Schnittstelle implementieren Sie die Schnittstelle in Ihrem Fragment
myfragment extends Fragment implement interfacename
{
@overide
void methodname()
{
}
}
und Sie erstellen die Referenz der Schnittstelle in Ihrer Aktivität
class Activityname extends AppCompatActivity
{
Button click;
Myfragment fragment;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
click=findViewById(R.id.button);
fragment=new fragment();
click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fragment.methodname();
}
});
}
}
Zuerst erstellen Sie eine Methode in Ihrer fragment
-ähnlichen
public void name()
{
}
in Ihrer activity
fügen Sie dies hinzu
add onCreate()
Methode
myfragment fragment=new myfragment()
rufen Sie schließlich die Methode auf, bei der Sie aufrufen möchten, fügen Sie dies hinzu
fragment.method_name();
versuchen Sie diesen Code