クラス FragmentParentNewsDetail.java には、ViewPager があり、FragmentPagerAdapter を使用して、次のように各ページに同じ Fragment を設定します。
@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;
}
FragmentNewsDetail.java には、パブリック メソッドがあります。
public String getNewsTitle()
{
Log.d(TAG, "getNewsTitle:" + newsTitle);
return newsTitle;
}
次に、 FragmentNewsDetail.java の getNewsTitle() メソッドを次のように呼び出します。
newsTitle = ((FragmentNewsDetail)myAdapter.getItem(vpViewPager.getCurrentItem())).getNewsTitle();
しかし、getNewsTitle() は常に "" を返すので、それについて混乱しています。
以下の方法で修正しました。
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: FragmentPagerAdapter 使用時に既存のフラグメントを取得する方法
どうもありがとう!