3

2 개의 탭 (페이지)이있는 뷰 페이지가 있습니다. 두 탭 모두 여러 항목 (행)이있는 목록보기를 포함합니다. 나는 탭 사이에서 스크롤 할 때 두 탭의 목록보기를 동기화 (동일한 행 표시)해야합니다.탭에서 동기화 된 목록 뷰가있는 뷰 페이지

나는 첫 번째 탭에 있고 현재 내 listview의 10-15 행을 표시합니다. 두 번째 탭으로 스크롤하면 두 번째 탭의 listview 행 10-15 행에 항목을 다시 표시하고 싶습니다.

이것이 가능합니까? 뷰포트에서 어떤 속성을 찾을 수 없습니다. 이 효과를 프로그래밍 방식으로 어떻게 얻을 수 있습니까 ??

답변

2

문제가 해결되었습니다.

public class myViewPager extends Fragment implements OnPageChangeListener { 
    ...   
    ViewPager viewPager; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
    { 
     ... 

     //init viewPager 
     ... 
     ... 

     viewPager.setOnPageChangeListener(this); 
     return view; 
    } 

    @Override 
    public void onPageSelected(int position) { 
     // get the 2 page(tabs) fragments (I am using FragmentStatePagerAdapter) [*1] 
     MyFragmentPagerAdapter a = (MyFragmentPagerAdapter) viewPager.getAdapter();  
     MyFragment selectedFrag = (MyFragment) a.instantiateItem(viewPager, position);  
     MyFragment previousFrag = (MyFragment) a.instantiateItem(viewPager, (position == 0) ? 1 : 0); 

     // get 1st visible item position index & item offset value from top [**2] 
     int index = previousFrag.listView.getFirstVisiblePosition(); 
     View view = previousFrag.listView.getChildAt(0); 
     int top = (view == null) ? 0 : view.getTop(); 
     //set the listView to the synchronized position 
     selectedFrag.listView.setSelectionFromTop(index, top); 
    } 

    ... 

    private class MyFragmentPagerAdapter extends FragmentStatePagerAdapter { 
     public MyFragmentPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      Bundle args = new Bundle(); 
      args.putInt("position", position); 
      return Fragment.instantiate(getActivity(), MyFragment.class.getName(), args); 
     } 
     ... 
     ... 
    } 

    public static class MyFragment extends Fragment { 
     ... 

     private ListView listView; 

     ... 
     // CreateView ... 
     // init listview ... 
     // do other stuff ... 
     ... 
    } 

} 

관련 도움말 :

[* 1] here

[** 2] here

경우 다른 사람에 여기에 내가했던 방법은 효과의이 종류를 필요 건배 .. :)

+0

실제 페이지로가는 길의 약 90 %를 스크롤 할 때까지'onPageSelected()'가 호출되지 않기 때문에이 구현을위한 UX는 최적이 아닙니다. 이렇게해도 원래 위치에 목록이 표시되고 갑자기 열립니다. 더 우아한 해결책은'onPageScrolled()'를 대신 사용하는 것입니다. –

관련 문제