android - tab - Fragmento en ViewPager, no se puede obtener la instancia actual de Fragment
viewpager android example (0)
En la clase FragmentParentNewsDetail.java, tengo una ViewPager, luego uso FragmentPagerAdapter para configurar cada página con el mismo Fragment, así:
@Override
public Fragment getItem(int position)
{
String newsId = this.myNewsIds.get(position);
Bundle bundle = new Bundle();
bundle.putInt(FragmentNewsDetail.NEWS_ID, Integer.parseInt(newsId));
FragmentNewsDetail fragmentNewsDetail = new FragmentNewsDetail();
fragmentNewsDetail.setArguments(bundle);
return fragmentNewsDetail;
}
en el FragmentNewsDetail.java, tengo un método público:
public String getNewsTitle()
{
Log.d(TAG, "getNewsTitle:" + newsTitle);
return newsTitle;
}
entonces quiero llamar al método getNewsTitle () en FragmentNewsDetail.java así:
newsTitle = ((FragmentNewsDetail)myAdapter.getItem(vpViewPager.getCurrentItem())).getNewsTitle();
Pero getNewsTitle () siempre devuelve "", estoy confundido acerca de eso.
Reparado por el siguiente método:
public Fragment getCurrentFragment(ViewPager pager,
FragmentPagerAdapter adapter)
{
try
{
Method m = adapter
.getClass()
.getSuperclass()
.getDeclaredMethod("makeFragmentName", int.class,
long.class);
Field f = adapter.getClass().getSuperclass()
.getDeclaredField("mFragmentManager");
f.setAccessible(true);
FragmentManager fm = (FragmentManager) f.get(adapter);
m.setAccessible(true);
String tag = null;
tag = (String) m.invoke(null, pager.getId(),
(long) pager.getCurrentItem());
return fm.findFragmentByTag(tag);
}
catch (NoSuchMethodException e)
{
e.printStackTrace();
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
catch (InvocationTargetException e)
{
e.printStackTrace();
}
catch (NoSuchFieldException e)
{
e.printStackTrace();
}
return null;
}
from: Cómo obtener fragmentos existentes al usar FragmentPagerAdapter
¡Muchas gracias!