2016-08-31 4 views
0

나는 FragmentPagerAdapter을 사용하여 ViewPager을 사용하여 각각 세 개의 탭을 표시하며 각각은 해당 단편으로 표시됩니다. 이러한 단편 중 하나에는 해당 탭으로 전환/스 와이프 할 때 업데이트해야하는 목록이 있습니다. 그러나 나는 그런 일이 일어날 방법을 찾지 못합니다. onResume 메서드를 사용해 보았지만 조각이 일시 중지되지 않고 탭 변경시 재개되지 않은 것처럼 보입니다. 나는을 제공하는 데 사용됩니다 내 RecordingService 클래스에 액세스 할 수 없습니다뷰 페이지 탭에서 목록 뷰 조각 업데이트

@Override 
public void onRefreshed() 
{ 
    List<Record> records = mRecordingService.getRecords(); 

    mRecordAdapter.clear(); 
    mRecordAdapter.add(record); 
} 

그러나이 코드를 사용 : 나는 다음과 같은 사용

@Override 
public void onPageSelected(int position) 
{ 
    FragmentRefreshInterface currentFragment = (FragmentRefreshInterface) mSectionsPagerAdapter.getItem(position); 
    currentFragment.onRefreshed(); 
} 

그리고 조각에 : 나는 또한 내 MainActivityViewPager.OnPageChangeListener를 사용하여 시도 데이터베이스 함수 (mRecordingService가 null 인 것 같기 때문에). 나는이 같은 조각에 초기화 :

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    mRecordingService = new RecordingService(getContext()); 
} 
+0

'Fragment'에는'onRefreshed()'메소드가 없습니다. 이 메소드를'@Oriride'하기 위해 어떤 인터페이스를 구현하고 있습니까? (여기에 표시된 각 메소드가 들어있는 정확한 클래스 이름을 표시하는 것이 도움이 될 것입니다.) –

+0

'mRecordAdapter'에 대한 선언은 무엇입니까? –

+0

'레코드'란 무엇입니까? 선언 된 곳은 어디입니까? 여기에'records'라는 변수가 있지만'record'는 아닙니다. –

답변

1

가있다 바쁘다 그것을 할 y. 귀하의 코드가 작동하지 않는 이유는 호출기 어댑터에서 getItem을 호출하기 때문입니다. getItem()은 실제로 프래그먼트 인스턴스를 반환합니다. 현재 인스턴스를 가져 오려면 instantiateItem() (실제로 사용되는 단편에 대한 참조를 반환)을 사용합니다.

이 같은 것을보고 코드를 변경

:

@Override 
public void onPageSelected(int position) 
{ 
    FragmentRefreshInterface currentFragment = (FragmentRefreshInterface) mSectionsPagerAdapter.instantiateItem(viewPager,position); 
    currentFragment.onRefreshed(); 
} 

그리고 그것은 작동합니다.

+1

그게 내가 찾고 있던거야 :) –

+0

나는'onRefreshed()'를 직접 호출하는 것이 해결책이라고 생각하지 않는다. 이것은 일부 인터페이스에서 구현 된 콜백 메소드 인 것으로 보입니다.물론이 메서드의 이름을 사용자 지정 이름으로 변경하면이 문제가 부분적으로 해결됩니다. –

-1

당신의 MainActivity에서 :

private FirstFragment firstFragment; 
private WantedFragment wantedFragment; 
private ThirdFragment thirdfragment; 

의 getItem에서

switch(postition){ 
    //return first, wanted, third fragments depending on position 
} 

onPageSelected 다음 onPageChangeListener를 사용

if(position == 1) // position of the wanted fragment 
wantedfragment.onRefreshed() 
+1

내가 예상 한 해결책이 아니지만 작동합니다 :-) 감사합니다. –

+0

나는 그것이 올바르게 구현되면 'ListView'가 자동으로 업데이트 될 때 콜백으로 보이는 메소드를 직접 호출하는 것에 회의적입니다. –

0

onRefreshed()에있는 코드는 onResume()으로 대신 입력하는 것이 좋습니다. Fragment에는 onRefreshed() 메서드가 없습니다. 이 메서드를 선언하는 다른 인터페이스를 구현해야합니다.

데이터베이스에 데이터를 저장하고 있으므로 CursorAdapter 또는 SimpleCursorAdapter과 같은 하위 클래스를 사용해야합니다. 이 작업을 올바르게 수행하면 레코드를 데이터베이스에 추가 할 때 ListView이 자동으로 업데이트됩니다. 그런 다음 서비스는 조각에서 서비스에 액세스 할 필요없이 레코드를 추가 할 수 있습니다.

관련 문제