저는 FragmentPagerAdapter
에 익숙하지 않으므로이 설명은 우리가 (귀하가) 설명을 비판적으로 읽은 것 중 하나 일 것입니다.ViewPager와 두 개의 조각이있는 FragmentPagerAdapter입니다. 두 번째에서 첫 번째로 이동하고 첫 번째 텍스트를 업데이트하십시오.
구조 : 나는 한 번에 두 조각을 저장할 FragmentPagerAdapter
(아래 코드)입니다. 첫 번째 부분은 책 발췌 부분을 표시하고 두 번째 부분은 책 제목 목록을 표시합니다.
목표 : 내가 제목에 설명되어 있습니다 무엇을 달성하고자하는 : 사용자가 호출기의 두 번째 조각을 탐색 제목을 클릭 한 다음 내가 첫번째 조각에 다시 사용자를 이동할 수 있으며, 첫 번째 조각에 텍스트를 업데이트하라고 알려줍니다. 첫 번째 단편은 이에 대한 방법이 triggerRefresh
입니다.
코드 :FragmentPagerAdapter
은 (내가 이해하지 못하는) 조각을 재사용/생성하기 때문에 문제가 발생한다고 생각합니다.
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
MyFragmentPagerAdapter mFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mFragmentPagerAdapter);
그리고 나는이 책 제목에서 콜백을받을 때, 나는 내 활동의 다른 곳에서 시도한 것입니다 :
static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
return new ExcerptsFragment();
case 1:
return new BookListFragment();
default:
throw new IllegalArgumentException("not this many fragments: " + position);
}
}
}
이 내가 관련 회원을 생성하는 방법입니다 : 이것은 내 클래스 제목과 조각 선택 : 문제의
mViewPager.setCurrentItem(0); // back to excerpts screen page. It's OK.
// Here's the problem! How to identify the fragment 0
// to ExcerptsFragment and call its triggerRefresh()?!?
시리즈 :
어댑터의 getView()
을 호출하면 현재 연결된 어댑터가 아닌 ExcerptsFragment
의 새 인스턴스가 반환되므로 (예상대로 예외가 발생 함) 작동하지 않습니다.
여기서 많은 사람들이 getView()
에 조각을 저장하는 것을 보았습니다 (example). 그게 맞습니까? 공식적인 예를 살펴보면 나에게 반 패턴처럼 보일 수 있습니다 (아이템을 들고 자동 참조를 무시하십시오). 그리고 그것은 또한 의견 here과 here입니다 (그리고 내게 옳은 것처럼 보입니다).
제안 사항? 나는이 모든 것을 이해하지 못한다면 놀라지 않을 것입니다 ...
태그를 할당하는 내부 메커니즘과의 호환성에 의존해서는 안됩니다. 비슷한 질문에 대한 내 대답을 올바르게 확인하는 방법을 참조하십시오. http://stackoverflow.com/questions/14035090/how-to-get-existing-fragments-when-using-fragmentpageradapter/41345283#41345283 – morgwai
@morgwai 경고를 보내 주셔서 감사합니다. 나를. 잠재적 인 독자들에게 경고하기 위해 면책 조항이 포함되었습니다. – davidcesarino
당신은 환영합니다 :) 나는 내 대답이 매우 새롭고 따라서 여전히 낮은 점수가 매겨지기 때문에 (물론 그 질문뿐만 아니라) 내 대답에 대한 링크를 직접 제공하는 것이 더 낫다고 생각합니다. 두 가지 모두 문제가있는 득점 답변. (왜'instantiateItem'을 오버라이드하는 솔루션만으로는 충분하지 않을지에 대한 해답을 설명해주었습니다) – morgwai