Je vois dans le Guide de développement Android Fragments qu'une "activité peut appeler des méthodes dans un fragment en acquérant une référence au fragment de FragmentManager, en utilisant findFragmentById()
ou findFragmentByTag()
."
L'exemple suivant montre comment obtenir une référence à un fragment, mais pas comment appeler des méthodes spécifiques dans le fragment.
Quelqu'un peut-il donner un exemple de la façon de procéder? J'aimerais appeler une méthode spécifique dans un fragment de l'activité parent. Merci.
ne pas avoir la question exactement comme c'est trop simple:
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>();
Mise à jour: Pour ceux qui utilisent Kotlin
var fragment = supportFragmentManager.findFragmentById(R.id.frameLayoutCW) as WebViewFragment
fragment.callAboutUsActivity()
Si vous utilisez “import Android.app.Fragment;” Utilisez ensuite:
1)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
Où R.id.example_fragment est probablement l'identifiant FrameLayout dans votre mise en page XML. OU
2)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”);
fragment.specific_function_name();
Où FragTagName est le nom spécifié par u lorsque:
TabHost mTabHost.newTabSpec(“FragTagName”)
Si vous utilisez «importer Android.support.v4.app.Fragment;» .__, utilisez soit:
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();
Si vous utilisez une bibliothèque de support, vous voudrez faire quelque chose comme ceci:
FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment);
fragment.myMethod();
((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
2. Si vous utilisez un fragment de bibliothèque de support, procédez comme suit:
((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
Je pense que le mieux est de vérifier si fragment est ajouté avant d'appeler la méthode fragment. Faites quelque chose comme ça pour éviter une exception nulle.
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>();
De fragment en activité:
((YourActivityClassName)getActivity()).yourPublicMethod();
D'activité en fragment:
FragmentManager fm = getSupportFragmentManager ();
//if you added fragment via layout xml
YourFragmentClass fragment =
(YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id);
fragment.yourPublicMethod();
Si vous avez ajouté fragment via code et utilisé une chaîne tag lors de l'ajout de votre fragment, utilisez plutôt findFragmentByTag:
YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag");
Je ne connais pas Java
, mais dans C#
(Xamarin.Android), il n'est pas nécessaire de rechercher le fragment à chaque fois que vous devez appeler la méthode, voir ci-dessous:
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()
{
// ...
}
}
Je pense que dans Java
, vous pouvez faire la même chose.
vous appelez aussi la méthode fragment en utilisant l'interface comme
d'abord vous créez une interface
interface name{
void methodname();
}
après avoir créé l'interface, vous implémentez l'interface dans votre fragment
myfragment extends Fragment implement interfacename
{
@overide
void methodname()
{
}
}
et vous créez la référence d'interface dans votre activité
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();
}
});
}
}
D'abord, vous créez une méthode dans votre fragment
comme
public void name()
{
}
dans votre activity
vous ajoutez ceci
ajouter la méthode onCreate()
myfragment fragment=new myfragment()
enfin appeler la méthode où vous voulez appeler ajouter ceci
fragment.method_name();
essayez ce code