2017-04-16 1 views
0

viewpager에 3 개의 탭이 있습니다. 탭 A, B, C으로 전화 할 수 있습니다. 각 탭에는 자체 조각이 있으며 frag1, frag2, frag3이라고 할 수 있습니다. 내가 원하는 탭 A의 frag1을 새로운 조각 frag4으로 대체하고 뷰 페이지의 다른 탭은 그대로 둡니다. 조각을 바꾸려고 시도했지만 작동하지 않습니다. 내 pageradapter에서 뭔가를 구현해야합니까?뷰 페이지 탭의 위치에서 조각을 바꾸는 방법은 무엇입니까?

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

private FragmentManager mFragmentManager; 
private Fragment frag = null; 

public SectionsPagerAdapter(FragmentManager fm) { 
    super(fm); 
    mFragmentManager = fm; 
} 


public void onSwitchToNextFragment() { 
    mFragmentManager.beginTransaction().remove(frag) 
      .commit(); 
    if (frag instanceof Fragment1){ 

     Log.v("here","swapping"); 
     frag = Fragment4.newInstance(); 
    } 
    Log.v("here","notified"); 
    notifyDataSetChanged(); 
} 
@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      frag = Fragment1.newInstance(); 
      Log.v("here","in getitem"); 
      return frag; 

     default: 
      Log.v("here","in default"); 
      return Fragment2.newInstance(); 
    } 
} 

@Override 
public int getCount() { 
    // Show 3 total pages. 
    return 3; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    switch (position) { 
     case 0: 
      return "SECTION 1"; 
     case 1: 
      return "SECTION 2"; 
     case 2: 
      return "SECTION 3"; 
    } 
    return null; 
} 

public void switchFrag(){ 
     onSwitchToNextFragment(); 
    // mFragmentManager.beginTransaction().replace(R.id.container,frag).commit(); 
    //  mFragmentManager.beginTransaction().add(frag).commit(); 
    notifyDataSetChanged(); 
} 

답변

0

뷰 페이지에서 단편을 바꾸는 데는 두 가지 방법이 있습니다. 옵션 1 : getItemPosition (Object 객체) 메서드를 재정의합니다.

public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

notifyDataSetChanged()를 호출하면 뷰 호출기가 모든보기를 제거하고 모두 다시로드합니다. 그러나 이것은 매우 효율적이지 않습니다.

또는 새보기를 인스턴스화 할 때 instantiateItem()을 호출합니다. 그런 다음 notifyDataSetChanged()를 사용하는 대신 findViewWithTag()를 사용하여 업데이트 할보기를 찾을 수 있습니다. 이 옵션은보다 효율적이고 유연합니다.

관련 문제