ViewPager
에 다른 조각을 보여주는 응용 프로그램을 만들고 있습니다. 나는이 같은 ViewPager
이러한 조각을 추가ViewPager에서 현재 보이는 조각의 인스턴스를 얻는 방법 :
public void intialiseViewPager()
{
List<Fragment> fragments = new Vector<Fragment>();
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);
}
이 모든 작업은 조각의 기본 빈 생성자를 재정의하지 않기 위해 수행됩니다. 권장하지 않는 것으로 알고 있습니다. . 이 작업을 수행 할 수있는 방법을
this.odTab = application.currentReport.getODTabByTabId(tabId);
누군가가 나에게 설명해 주 시겠어요 :
지금 나는이 줄에 현재 보이는 조각에 넣어 odTab
개체의 인스턴스를 얻을 필요가? odTab 객체를 꺼낼 수 있도록 현재 보이는 프래그먼트 인스턴스를 얻으려면 어떻게해야합니까?
UPDATE :
@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;
}
}
}
: 나는 내가이 같은 odTab의 인스턴스를 설정하고 있습니다 currentVisibleTab
라고 응용 프로그램 클래스에 odTab
개체 인스턴스를 추가 한 여기받은 제안 UPDATE2 : 이것은 내 ViewPagerAdapter
입니다 :
public class ViewPagerAdapter extends FragmentPagerAdapter
{
private List<Fragment> fragments;
/**
* @param fm
* @param fragments
*/
public ViewPagerAdapter(FragmentManager fm, List<Fragment> 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<Fragment> fragments)
{
this.fragments.addAll(fragments);
}
public List<Fragment> getFragments()
{
return fragments;
}
}
List
의 조각이 ViewPager
으로 표시됩니다. 이 목록은 다음과 같이 초기화 :
List<Fragment> fragments = new Vector<Fragment>();
은 내가 이해할 수없는 것은 내가이 목록에서 인터페이스 메서드를 트리거 현재의 단편에 대한 참조를 가져 방법이다. 그리고 이것은 관련 질문이 아니지만 어쩌면 그 대답을 알고있을 것입니다 : List
과 Vector
의 차이점은 무엇입니까?
이 옵션을 계속 선택합니다.
http://stackoverflow.com/questions/10024739/how-to-determine-when-fragment-becomes-visible-in-viewpager. 이것을 확인하십시오 – Raghunandan
안녕하세요 @Raghunandan, 나는 "setUserVisibleHint"옵션을 시도했지만 어떤 이유로 그것을 올바르게 처리하지 못했습니다. 그래서 나는 이것이 방법이 아니라는 것을 알아 냈습니다. 다시 한번 살펴 보겠습니다. –
은'setUserVisibleHint'를 무시하고'setUserVisibleHint' 안에서'GridFragment.newInstance (tabId)'를 사용합니다. 인스턴스를 기록하고 확인하십시오. 테스트되지 않은 제안. – Raghunandan