Comment puis-je mettre une balise pour viewpager fragments?
I,m, à l'aide slidingTabLayout avec 4 onglets et un viewpager et 4 fragment de classe pour chaque onglet.
j'ai besoin de recharger un de mes fragments (premier onglet) dans mon projet lorsque l'utilisateur cliquez sur quelques boutons, et pour cela, j'ai besoin d'avoir une balise pour que fragment
ma question est : comment puis-je mettre une balise pour l'un de viewpagers fragment???
Mon MainActivity onglet et viewpager codes:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
Toolbar toolbar;
ViewPager pager;
ViewPagerAdapter adapter;
SlidingTabLayout tabs;
CharSequence Titles[]={"نوع","قیمت","برند","همه"};
int Numboftabs = 4;
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "درج آگهی رایگان", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
//Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs);
//Assigning ViewPager View and setting the adapter
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
//Assiging the Sliding Tab Layout View
tabs = (SlidingTabLayout) findViewById(R.id.tabs);
tabs.setDistributeEvenly(true); //To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width
//Setting Custom Color for the Scroll bar indicator of the Tab View
tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return getResources().getColor(R.color.colorWhite);
}
});
//Setting the ViewPager For the SlidingTabsLayout
tabs.setViewPager(pager);
pager.setCurrentItem(3);
} and ....
Merci beaucoup
- si vous souhaitez utiliser des fragments déjà dans viewpager, vous pouvez utiliser l'adaptateur getItem(position) de la méthode. et pour les balises, je pense que vous devriez passer les balises dans le Constructeur de l'Adaptateur puis de chacun des fragments.
- merci mon ami , mais pouvez-vous m'expliquer plus sur le passage des balises à la carte? merci
Vous devez vous connecter pour publier un commentaire.
Il y a le couple de solution pour cela.
1). Lorsque le
FragmentPagerAdapter
ajoute unFragment
à laFragmentManager
, il utilise une balise spéciale basée sur la position particulière que leFragment
sera placé. Ainsi, vous pouvez simplement obtenir le courant visibleFragment
dans votreViewPager
à l'aide de ces lignes de code2). Vous devez garder une trace de toutes les fragments dans le
FragmentStatePagerAdapter
. Pour la démo échantillon que vous pouvez consulter à la deuxième approche ici3). Vous pouvez faire usage de
EventBus
pour afficher les événements de votreFragment
à partir de n'importe où. Tout ce que vous avez à faire est d'enregistrer votreFragment
pour cet événement spécifique. Pour consulter la documentation officielle cetteIci est la méthode qui est utilisée par
FragmentPagerAdapter
pour créer leFragment
's nom de la balise:viewId
est l'id de laViewPager
.id
est la position du fragment à l'intérieur de laViewPager
.Exemple:
Si cette question a déjà été répondu. J'ai une autre approche pour achiving ce qui pourrait être mieux que la façon dont les fragments sont marqués dans le code sont soumis à modification. Aussi pour indiquer à l'aide de l'adaptateur.getItem(position) ne renvoie pas l'exemple de fragment affiché, il dépendra de notre propre implémentation de la méthode getItem.
Donc, Fondamentalement, le problème est que nous n'avons pas l'instance de Fragments qui sont présents dans le viewPager. L'idée est de remplacer la méthode
de FragmentStatePagerAdapter. Si l'on regarde l'implémentation par défaut de cette méthode, il fait le travail de l'instanciation de nouveaux Fragments s'ils ne sont pas existe et de les renvoyer. Aussi il les stocke dans une liste de fragments de ce qui est privé. Donc ce que nous pouvons faire est de Remplacer cette méthode et de stocker les instances sur des fragments dans notre propre liste. Ceci peut être implémenté de la manière suivante
Par conséquent, nous avons le cas de tous les fragments disponibles avec nous, nous ne sommes plus du tout besoin de balises pour trouver le fragment instances sont affichées à l'utilisateur.