2012-11-23 3 views
3

원하는 것은 내 Fragment 클래스의 함수를 호출하는 것입니다. 그러나 ViewPager에있는 조각의 인스턴스에 액세스하는 방법을 찾지 못하는 것 같습니다.ViewPager에서 단편에 대한 메소드 호출

내 활동의 XML : (? 수 I)에는 너무 없다

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" /> 

내가 findFragmentById()를 호출 할 수 없습니다 또한 내가) (findFragmentByTag에 줄 모르는 , 항상 반환 null :/

답변

6

pagerAdapter.getItem (INT 그래서 당신은 뭔가를 할 수 있습니다) 메서드는 일반적으로 조각의 새 인스턴스를 만듭니다. 그러나 할 수있는 작업은 HashMap을 사용하여 이미 존재하는 조각에 대한 참조를 저장하는 것입니다.

// ViewPagerAdapter 
private HashMap<Integer, Fragment> fragmentHashMap = new HashMap<>(); 

@Override 
public Fragment getItem(int position) { 
    if (fragmentHashMap.get(position) != null) { 
     return fragmentHashMap.get(position); 
    } 
    TabFragment tabFragment = new TabFragment(); 
    fragmentHashMap.put(position, tabFragment); 
    return recipeTabFragment; 
} 

그럼 당신은 그 메소드를 호출하기 위해 조각을 찾을 수 있습니다

FragmentAdapter fa = (FragmentAdapter)viewPager.getAdapter(); 
MyFragment f = (MyFragment)fa.getItem(index); 
f.myMethod(Object obj); 

당신은 당신이 액세스하기 위해 특정 클래스에 캐스팅 때문에 조각이있는 인덱스를 이동하는 추적해야합니다 방법.

2

ViewPager에는 연결된 FragmentAdapter가 있어야합니다.

FragmentAdapter fa = (FragmentAdapter)viewPager.getAdapter(); 
Fragment f = fa.getItem(index); 
+1

예하지만 getItem은 내가 원한 것이 아닌 새로운 인스턴스를 만듭니다. 한 번만 생성 한 다음 후속 호출에서 동일한 인스턴스를 반환해야합니다. 그러나 나는 옳은 일인지 확신하지 못합니다. – foke

+0

viewPages는 가비지 수집을하지 않기 때문에 조각을 재활용해야합니다. 자체 GC 페이저를 원한다면 fragment pager adapter (http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html)를 참조하십시오. –

+0

getItem()을 사용하지 마십시오. 조각의 인스턴스. 아래 내 대답을 참조하십시오. –