Le passage des données à Partir de l'Activité de Fragment à l'aide de l'interface
Je veux passer des données d'activité de faisceau à l'aide de l'interface pas de bundle.
Regardez le code ci-dessous:
Interface:
public interface FragmentCommunicator {
public void passData(String name);
}
MainActivity
public class MainActivity extends AppCompatActivity{
FragmentCommunicator fragmentCommunicator;
private Fragment fragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fragment= new Fragment();
fragmentCommunicator = (FragmentCommunicator) getApplication();
fragmentCommunicator.passData("hello");
getSupportFragmentManager().beginTransaction().replace(R.id.container ,fragment).commit();
}
});
}
}
Fragment
public class Fragment extends android.support.v4.app.Fragment implements FragmentCommunicator {
FragmentCommunicator communicator;
Context c;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, null);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.c = context;
}
@Override
public void passData(String name) {
Toast.makeText(c, name, Toast.LENGTH_SHORT).show();
}
}
Je veux juste passer une chaîne de caractères lorsque je clique sur le bouton pour lancer fragment et lorsque le fragment est lancé doit montrer le toast contenant cette chaîne..
S'il vous plaît aider
toute aide serait appréciée.
- Comment passer de l'activité des fragments stackoverflow.com/a/9245510/6254066
- J'ai dit que je veux passer des données à l'aide de l'interface pas en bundle.
Vous devez vous connecter pour publier un commentaire.
Écrire cette ligne de code après la méthode onCreate.
Quelque chose comme cela
Puis écrire cette ligne de code dans onCreateView() de votre fragment. Quelque chose comme ceci
Note: pas besoin de mettre en œuvre FragmentCommunicator interface dans votre fragment. Espérons que cela fonctionne. Il fonctionne pour moi. J'ai testé
Activités contiennent des fragments, vous ne devriez pas avoir besoin de passer quelque chose. Une technique serait de stocker vos données dans les champs d'activité et obtenir une référence à elle avec getActivity().
Les meilleures pratiques pour faire référence à l'activité parent d'un fragment?
Autant que le code que vous avez posté, je ne vois pas où vous appelez votre passer des données la méthode dans le fragment. Je suggère de l'appeler dans onviewcreated().
Je vais tenter de fournir un exemple de code plus tard que le fait de faire cela sur mon appareil mobile s'avère difficile.
Essayer passdata (getActivity ().someStringVariable);
Dans votre
Fragment
de la classe, unTAG
champ. Nommer un fragmentFragment
peut être un peu déroutante, car c'est le même nom qu'un AndroïdeFragment
, et je vais donc utiliserExampleFragment
:Maintenant, lorsque vous remplacez le fragment dans l'activité, assurez-vous de passer le
TAG
:Remarque que dans votre cas, il serait
Fragment.TAG
, mais j'ai utiliséExampleFragment
à préciser queFragment.TAG
ne fait pas partie du kit SDK d'Android.Pour obtenir une référence de votre fragment dans votre activité, utilisez le
FragmentManager
pour trouver votre fragment:Vous pouvez alors assurez-vous que
myFragment
n'est pasnull
et de le jeter auxFragmentCommunicator
:Remarque que dans votre exemple
fragmentCommunicator = (FragmentCommunicator) getApplication();
est pas valide, car il est de votre fragment de la mise en œuvre de l'interface, pas votre application.