Comment faire pour actualiser la vue actuelle dans ViewPager
Je suis en utilisant ViewPager
avec vue sur V1, V2, V3 ..... Je suis en train de définir la visibilité d'un LinearLayout utilisé dans chaque vue, en cliquant sur un bouton. Par le biais de ce code, il appliquer les changements sur la page suivante, au lieu de la vue actuelle. par exemple, je suis sur V5. Quand je clique, ça permet de masquer/afficher l'objet sur la V6. Si je vais vers l'arrière à partir de la V6 à la V5, puis il applique le changement dans la V4.
Voici le code:
public class FragmentStatePagerSupport extends FragmentActivity {
static final int NUM_ITEMS = 10;
MyAdapter mAdapter;
ViewPager mPager;
static int mNum;
private Button btn_zoom;
static LinearLayout LL_Head;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mPager.setCurrentItem(5);
btn_zoom = (Button)findViewById(R.id.btn_zoom);
btn_zoom.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if (LL_Head.getVisibility() == View.VISIBLE) {
LL_Head.setVisibility(View.GONE);
}else{
LL_Head.setVisibility(View.VISIBLE);
}
}
});
.
.
.
}
public static class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
return ArrayListFragment.newInstance(position);
}
}
public static class ArrayListFragment extends ListFragment {
static ArrayListFragment newInstance(int num) {
ArrayListFragment f = new ArrayListFragment();
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNum = getArguments() != null ? getArguments().getInt("num") : 1;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.sura_vpager, container, false);
TextView tv1=(TextView) v.findViewById(R.id.txtHead);
tv1.setText("Fragment #" + mNum);
LL_Head = (LinearLayout)v.findViewById(R.id.LL_Head);
return v;
}
Veuillez en informer
Grâce
OriginalL'auteur Azam | 2011-12-26
Vous devez vous connecter pour publier un commentaire.
Afin de rendre fluide l'expérience de la ViewPager charge non seulement de la vue, vous êtes actuellement à la recherche, mais aussi de la côté des vues. Ce qui signifie que si vous êtes de défilement à partir de la position 0 à la position 1, ce qui se passe réellement est que la position 2 est chargé, de sorte qu'il sera prêt lorsque vous faites défiler sur. C'est pourquoi le changement est appliqué "à la prochaine", plutôt que l'actuel (si vous faites défiler la vue de 2 à 1, puis afficher 0 est créé).
Puisque vous êtes réglage de la statique LinearLayout dans OnCreate, alors c'est seulement la dernière à être créé, qui est changé et cela ne pourra jamais être celui que vous cherchez, si vous avez navigué jusqu'à la fin de la pagination. Au lieu de cela, vous devez garder une trace de qui fragmentent l'utilisateur est à la recherche, au (ViewPager.setOnPageChangeListener()) et de mettre en cache le fragment de votre carte. Vous savez alors quel fragment de la position que vous voulez, et quand vous le demandez, vous serez juste de retour de celui que vous avez créé précédemment (ne pas en créer un nouveau, puis ça ne marchera pas :)).
Ou, le tl;dr version:
LL_Head est presque toujours d'être le fragment suivant, pas l'actuel. N'utilisez pas de manière statique. Cache dans votre PagerAdapter et reget quand vous en avez besoin.
Edit:
Sinon, vous voudrez peut-être les fragments d'écouter un des événements de toutes sortes, qui leur dit qu'ils devraient afficher ou masquer la mise en page en question. Sinon, il ne l'actuel fragment qui est concerné par ce, plutôt que de tous les fragments.
OriginalL'auteur Mark Gjøl
La numérotation en Java commence à partir de 0. Ainsi, lorsque vous souhaitez définir le 5ème élément, vous devez appeler mPager.setCurrentItem(4);
Espérons que cette aide!
OriginalL'auteur Dimitris Makris