J'ai un bouton d'action flottante (FAB) dans l'activité principale avec 4 onglets de fragmentation en dessous.Android: Actualiser l'onglet du fragment ViewPager actuellement affiché après avoir saisi des données dans l'invite de l'activité principale
J'ai une boîte de dialogue séparée pour la saisie de données lorsque je clique sur le FAB en fonction de l'onglet affiché.
Maintenant, pour le premier onglet, je suis en mesure d'actualiser le contenu du fragment immédiatement après avoir entré des données et en cliquant sur OK dans l'invite de boîte de dialogue en utilisant Interface
. Toutefois, pour les onglets 2 à 4, je ne suis pas en mesure d'actualiser les données immédiatement après avoir cliqué sur OK dans la boîte de dialogue respective pour chacun des onglets 2 à 4. Je dois cliquer sur le premier onglet puis revenir à l'onglet précédemment affiché pour pouvoir actualiser les vues.
Ce que je veux faire est:
De deuxième/troisième/quatrième onglet, après la saisie des données et en cliquant sur l'invite de dialogue d'entrée pour l'onglet correspondant, l'onglet affiché doit immédiatement mettre à jour les vues à l'intérieur il en fonction de ce que j'ai entré dans la boîte de dialogue et enregistré dans la base de données.
Veuillez noter que je sauvegarde les entrées dans la base de données après avoir cliqué sur le bouton OK dans les invites.
Comment est-ce que je peux faire ceci? Merci d'avance et j'apprécie toute votre aide!:)
Voici mon code (je suis en utilisant l'interface):
public class MyActivity extends AppCompatActivity {
private PopupListener popupListener;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Your dialog code.
setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
popupListener.onDialogClick("first_tab"); //"second_tab" for second tab, and so on...
}
})
}
public void setPopupListener(PopupListener popupListener) {
this.popupListener = popupListener;
}
public interface PopupListener {
void onDialogClick(String value);
}
}
code en 2ème onglet:
public class MyFragment extends Fragment {
@Override
public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((MyActivity) getActivity()).setPopupListener(new MyActivity.PopupListener() {
@Override
public void onDialogClick(String value) {
//After clicking dialog ok button in Activity
setUserVisibleHint(true, view); // get value from the database here.
}
});
}
}
Code pour mettre à jour cu fragment rrently affichée (échantillon est inférieure à deuxièmeonglet):
@Override
public void setUserVisibleHint(boolean isVisibleToUser, final View view) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//get data from database and refresh view.
viewFunds(view) //method is for updating 2nd tab
}
}
OnCreate intérieur() de l'ensemble des 4 fragments:
public void onCreate(@Nullable Bundle savedInstanceState) {
setUserVisibleHint(false);
}
premier code onglet: (ajouté selon la demande de commentaire)
@Override
public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((Main2Activity) getActivity()).setPopupListener(new Main2Activity.PopupListener() {
@Override
public void onDialogClick(String value) {
//After clicking dialog ok button in Activity
// you will get value here.
viewBudget(view); //method to updated views inside first tab
}
});
}
FAB Surclic Listener:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.floatingActionButton_main2);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = tabLayout.getSelectedTabPosition();
switch (position) {
case 0:
// first tab is selected
//Toast.makeText(context,"0",Toast.LENGTH_LONG).show();
break;
case 1:
// second tab is selected
//Toast.makeText(getApplicationContext(),"1",Toast.LENGTH_LONG).show();
break;
case 2:
// third tab is selected
//Toast.makeText(getApplicationContext(),"2",Toast.LENGTH_LONG).show();
UpdateableFragment.showDialog(); //ERROR: non static method onDialogClick cannot be referenced from static context
break;
case 3:
// third tab is selected
//Toast.makeText(getApplicationContext(),"3",Toast.LENGTH_LONG).show();
break;
}
J'utilise déjà 'Interface' comme mentionné dans la question. Vous avez mentionné 'broadcast', pouvez-vous donner plus de détails en ajoutant une réponse? Je vous remercie. –
Code pour le premier onglet ajouté (voir la question mise à jour ci-dessus). Merci :) –
Premier fragment intérieur, onViewCreated. –