Как получить экземпляр видимого в данный момент фрагмента в 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

Я все еще проверяю эту опцию.

Ответы на вопрос(2)

Ваш ответ на вопрос