Как получить экземпляр видимого в данный момент фрагмента в ViewPager:
м создание приложения, которое показывает различные фрагменты вViewPager
, Я добавляю эти фрагменты вViewPager
как это:
public void intialiseViewPager()
{
List fragments = new Vector();
numberOfTabs = application.currentReport.getODTabsList().size();
for (int i = 0; i < numberOfTabs; i++)
{
ODTab tempTab = application.currentReport.getODTabsList().get(i);
if (tempTab.getTabType().equals(ODGrid.XML_GRID_ELEMENT))
{
GridFragment gridFragment = GridFragment.newInstance(tempTab.getTabId());
fragments.add(gridFragment);
}
else if (tempTab.getTabType().equals(ODChart.XML_CHART_ELEMENT))
{
NewChartFragment chartFragment = NewChartFragment.newInstance(tempTab.getTabId());
fragments.add(chartFragment);
}
}
Log.d(TAG, "Current report fragments set to adapter: "+fragments.toString());
mPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), fragments);
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setOffscreenPageLimit(0);
mViewPager.setOnPageChangeListener(this);
}
Как видите, я передаю фрагменту строку (tempTab.getTabId()
), в этой строке:
GridFragment gridFragment = GridFragment.newInstance(tempTab.getTabId());
В самом фрагменте я делаю это для инициализации:
public static final GridFragment newInstance(String tabId)
{
GridFragment f = new GridFragment();
Bundle bdl = new Bundle(2);
bdl.putString(TAB_ID, tabId);
f.setArguments(bdl);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState)
{
String tabId = getArguments().getString(TAB_ID);
if (application.currentReport != null)
{
this.odTab = application.currentReport.getODTabByTabId(tabId);
}
else
{
startActivity(new Intent(getActivity(), LoginScrActivity.class));
}
super.onCreate(savedInstanceState);
}
Все это выполняется для того, чтобы не перекрывать пустой конструктор фрагмента по умолчанию, так как я понимаю, что это не рекомендуется.
Теперь мне нужно получить экземплярodTab
объект, который я помещаю в видимый фрагмент в этой строке:
this.odTab = application.currentReport.getODTabByTabId(tabId);
Может кто-нибудь объяснить мне, как это можно сделать? Как получить экземпляр видимого в данный момент фрагмента, чтобы я мог извлечь из него объект odTab?
ОБНОВИТЬ: С предложениями, которые я получил здесь, я добавилodTab
экземпляр объекта в классе приложения, который называетсяcurrentVisibleTab
и я'm устанавливаем экземпляр odTab следующим образом:
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
Log.d(TAG, "setUserVisibleHint invoked!");
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser)
{
if (odTab != null && getActivity() != null)
{
Log.d(TAG, "Currently visable tab: "+odTab.getTabTitle());
application.currentVisibleTab = odTab;
}
}
}
UPDATE2: Это мое :ViewPagerAdapter
public class ViewPagerAdapter extends FragmentPagerAdapter
{
private List fragments;
/**
* @param fm
* @param fragments
*/
public ViewPagerAdapter(FragmentManager fm, List fragments) {
super(fm);
this.fragments = fragments;
}
/* (non-Javadoc)
* @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
public void removeAllFragments()
{
this.fragments.clear();
}
public void addFragmentsListToAdapter(List fragments)
{
this.fragments.addAll(fragments);
}
public List getFragments()
{
return fragments;
}
}
В нем у меня естьList
фрагментов, которые показаныViewPager
, Этот список инициализируется так:
List fragments = new Vector();
Что я не делаюЯ не понимаю, как я получаю ссылку на текущий фрагмент, который вызвал метод интерфейса из этого списка. И это не связанный вопрос, но, возможно, вы знаете ответ: в чем разница междуList
а также ?Vector
Я все еще проверяю эту опцию.