Lo que funcionó para mí fue llamar a mPager.setCurrentItem después del mPagerAdapter.notifyDataSetChanged(), y no como un ejecutable publicado.
Aquí es un ejemplo (en MonoDroid):
public void UpdateDetialsView(string type)
{
string typeName4 = Java.Lang.Class.FromType(typeof(ParcelRecordComplaintDetailsView)).Name;
if (_fragments.Count > 3)
{
_fragments.RemoveAt(_fragments.Count - 1);
////////////////////////////////////////////////////////////
// Called here it wasn't working for me (Posted or not)
//_viewPager.Post(new Action(() => { _viewPager.SetCurrentItem(3, true); }));
}
_fragments.Add(Fragment.Instantiate(Activity, typeName4));
_pagerAdapter.NotifyDataSetChanged();
////////////////////////////////////////////////////////////
// Called here it works as expected
_viewPager.SetCurrentItem(3, true);
}
donde
protected MyAdapter _pagerAdapter;
protected ViewPager _viewPager;
private List<Android.App.Fragment> _fragments;
y
public class MyAdapter : Android.Support.V13.App.FragmentStatePagerAdapter
{
private List<Fragment> _fragments;
public override Java.Lang.Object InstantiateItem(View p0, int p1)
{
return base.InstantiateItem(p0, p1);
}
public MyAdapter(Android.App.FragmentManager fm) : base(fm)
{
}
public MyAdapter(Android.App.FragmentManager fm, List<Android.App.Fragment> fragments) : base(fm)
{
_fragments = fragments;
}
public override int Count
{
//get { return FRAG_PAGES; }
get { return _fragments.Count; }
}
public override Android.App.Fragment GetItem(int p0)
{
return _fragments[p0];
}
public override float GetPageWidth(int p0)
{
//return base.GetPageWidth(p0);
return (float) (0.5f);
}
public override int GetItemPosition(Java.Lang.Object p0)
{
//return base.GetItemPosition(p0);
return PagerAdapter.PositionNone;
}
}
En primer lugar, el viewpager SÓLO existe en el paquete de soporte. Ahora la pregunta sería, ¿cuál es el problema que enfrenta? si establece setCurrentItem (2, false) ¿qué hace en su lugar? ¿Puedes editar tu pregunta para que sea un poco más específica? –
Así que puse mPager.setCurrentItem (1, verdadero); en un postrunnable para dar una pista al usuario de que el objeto es un viewpager. El problema es que no hay animación cuando lo pongo en el postrunnable que mata el punto. ¿Hay alguna otra manera de que yo pueda hacer esto? – MinceMan