2016-09-19 4 views
0

안녕하세요, 저는 Android 앱을 처음 사용하고 있으며 tabLayout이 포함 된 뷰 호출기를 사용하여 애플리케이션을 만들고 싶습니다. 또한 목록이 포함 된 조각이 있는데이 조각을 만들고 싶습니다. 선택한 페이지에 따라 다른 페이지의 데이터를 사용합니다. 거의 달성했지만 viewPager 페이지를 만들 때 문제가 발생했습니다. 내 ViewPagerAdapter가 FragmentStatePagerAdapter를 extemds하고 다음과 같습니다 : 나는이 일을하고 내 MainActivity에서ViewPager 슬라이드가 첫 번째와 마지막 조각을 건너 뜁니다.

public class ViewPagerAdapter extends FragmentStatePagerAdapter{ 
    static final int NUM_ITEMS = 7; 


    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Log.e("new instance",position+""); 
     Fragment fragment=null; 

     switch (position) 
     { 
      case 0: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 
       break; 
      case 1: fragment= new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 2: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 3: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 4: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 5: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 6: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 

     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 
} 

:

문제가 페이지를 보내 주시면에
viewPager = (ViewPager) findViewById(R.id.pager); 
     final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 

     viewPager.setAdapter(adapter); 

     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 

      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 

    } 

는 : 활동이 처음 생성 할 때, 로그에 나는 것을보고 두 번째 탭의 위치 2, 세 번째 탭의 위치 3, 여섯 번째 탭의 위치 4, 다섯 번째 위치를 만들고 첫 번째 페이지의 위치 0과 위치 1을 만들고 마지막 탭은 6 번째 탭의 위치를 ​​만듭니다. 스크롤 뒤로 4,3,2,1,0 및 첫 번째 조각에 대한 아무것도 만드는 것입니다. 선택한 탭에 따라 데이터를 설정할 때 앱의 기능에 영향을줍니다. 호출기가 항목 0과 항목 6, 마지막 항목을 포함하는 페이지에서 하나의 조각을 만들 수 있도록 문제를 해결할 수 있습니까? 즉, 사용자가 스크롤 현재 페이지를 왼쪽 또는 오른쪽으로 좋은 사용자 경험을 할 수 있도록 기본적으로

+0

[ViewPager 프래그먼트의 데이터 새로 고침] (http://stackoverflow.com/questions/36503779/refresh-data-in-viewpager-fragment) 기본적으로 ViewPager는 현재 프래그먼트와 프래그먼트를 양쪽에 유지합니다. 빠른 스 와이프를 부드럽게 유지하기 위해 살아 있습니다. 로드 할 때 각 조각에서 무언가를해야하는 경우 링크 된 대답에 설명 된 방법을 사용하십시오. –

답변

0
 viewPager = (ViewPager) findViewById(R.id.pager); 
     final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 

     viewPager.setAdapter(adapter); 
     tabLayout.setupWithViewPager(viewPager) // link the given ViewPager and this TabLayout together so that changes in one are automatically reflected in the other 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

    } 

는 현재 페이지의 어느 한쪽이 생성되고 캐시됩니다. 첫 번째 페이지가로드 될 때 (페이지 1과 2가 생성 될 때) 두 번째 페이지로 스 와이프하면 1과 2가 이미 메모리에 있으므로 페이지 만 오른쪽, 즉 세 번째 페이지가로드됩니다.

자세한 내용은 link을 참조하십시오.

또한 tablayout은 viewpager와 tablayout을 연결하는 편리한 방법 setUpWithViewPager을 제공합니다. 현재 항목을 수동으로 설정하는 대신이 방법을 사용할 수 있습니다.

관련 문제