Le passage des données entre des fragments dans les viewpager
J'ai Viewpager avec 2 fragments: CurrentWeatherFragment
et ForecastFragment
. J'ai besoin de passer de la chaîne de l'un à l'autre, Iam à l'aide de l'interface comme ci-dessous, mais je reçois NullPointerException
, le message ne passe pas propertly...
public class CurrentWeatherFragment extends Fragment {
SendMessage SM
public void onCreateView(...) {
String Message = "Hello"
SM.sendData(Message);
}
interface SendMessage
{
public void sendData(String message);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
SM = (SendMessage) activity;
} catch(ClassCastException e) {
throw new ClassCastException("Musisz zaimplementowac metode sendData");
}
}
}
MainActivity.java
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
public class MainActivity extends FragmentActivity implements CurrentWeatherFragment.SendMessage {
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting fragment view pager
viewPager = (ViewPager)findViewById(R.id.pager);
PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
}
public void sendData (String message){
ForecastFragment FF = new ForecastFragment();
FF.getData(message);
}
}
ForecastFragment.java
public class ForecastFragment extends Fragment {
public View onCreateView(){
TextView txt = (TextView)v.findViewById(R.id.txt_forecast);
}
public void getData(String message){
txt.setText(message);
}
}
J'ai utilisé cette méthode avec succès dans d'autres applications, où j'ai eu 2 fragments dans une activité et que je pouvais l'appeler par son ID
public void sendData(String message) {
SecondFragment f2 = (SecondFragment)getFragmentManager().findFragmentById(R.id.F2);
f2.getData(message);
}
Mais ici les Fragments n'ont pas les Id et je pense que le message n'est pas passé parce que je n'utilise pas FragmentManager()
, mais comment trouver le fragment de viewpager sans ID, toute suggestion/idées?
OriginalL'auteur drapichrust | 2015-04-19
Vous devez vous connecter pour publier un commentaire.
Bien qu'un peu hacky ce que vous pouvez faire est d'obtenir le fragment de son étiquette en utilisant le code suivant:
Où R. id.pager est l'id de la viewpager dans votre mise en page et l'indice de la position (un nombre entier) dans le Viewpager Adaptateur.
Je ne peux pas dire que cela ne fonctionne jamais, mais il fonctionne pour moi en ce moment.
L'Alternative que je suggère, c'est à l'aide d'un LocalBroadcastManager et un BroadcastReciver pour envoyer des données à l'interne entre vos fragments en tant que bien que ses un peu plus de travail, il aide à se débarrasser du code spaghetti situation vous pouvez trouver vous-même en essayant de référence les fragments directement.
OriginalL'auteur CarbonAssassin
Pour transmettre des données entre des fragments que vous devez transmettre les données du constructeur de l'objet.
Être conscient de ne pas surcharger le constructeur par défaut, au lieu de créer une méthode statique getInstance(String data).
Ensuite, vous pouvez obtenir les données dans le fragment de la méthode onCreate avec getArguments()
Cela ne répond pas à la question.
OriginalL'auteur Stefano Vuerich
Pour certains autres utilisateurs qui comme moi à la recherche pour le fragment de viewpager d'envoi de données
Ici est solution de travail :
Envoi de données à partir de fragment À l'onglet mise en page de l'affichage pager de fragments:
Principal fragment :
Pour l'onglet mise en page, je suis l'aide de deux fragments
1) BillDetailFragment et
2) ClientDepMonFragment
et voici comment accéder à ces données à partir de fragment
BillDetailFragment: surcharger la méthode onCreate
OriginalL'auteur dharmx