3

У меня есть FragmentPagerAdapter, который создает это дочерние страницы (которые ListFragments) следующим образом:ListView OnScrollListener не дозвонились внутри ViewPager

@Override 
public Fragment getItem(int position) { 
    return FragmentChildPage.newInstance(); 
} 

Даю ViewPager в OffscreenPageLimit из 1. Ребенок ListFragments иметь обычай ScrollListener.

Проблема у меня есть обычай прокрутка слушатель работает только на ребенке ListFragments, которые создаются, когда ViewPager будет прокатывается мимо его OffscreenPageLimit, т.е. дочерних страниц> 2.

Более запутанный, если я перечисляю несколько страниц, а затем вернитесь на первую страницу, теперь работает прослушиватель прокрутки.

Что здесь происходит? Кажется, что ViewPager мешает некоторым дочерним страницам OnScrollListener.

Thanks

ответ

5

Попробуйте это. Работает на меня!

public class ActivityTest extends SherlockFragmentActivity { 

    private ViewPager mViewPager; 

    private TestAdapter mAdapter; 

    @Override 
    protected void onCreate(Bundle arg0) { 
     super.onCreate(arg0); 

     mViewPager = new ViewPager(this); 
     mViewPager.setId(android.R.id.button1); 
     setContentView(mViewPager); 

     mAdapter = new TestAdapter(getSupportFragmentManager()); 
     mViewPager.setAdapter(mAdapter); 
    } 

    private class TestAdapter extends FragmentPagerAdapter { 

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

     @Override 
     public Fragment getItem(int position) { 
      return TestListFragment.newInstance(position); 
     } 

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

    } 

    private static class TestListFragment extends SherlockListFragment { 

     private static final String TAG = TestListFragment.class.getSimpleName(); 

     private String[] mItems = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9","0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; 

     private int mPos; 

     @SuppressLint("ValidFragment") 
     public static TestListFragment newInstance(int pos) { 
      TestListFragment frag = new TestListFragment(); 
      Bundle b = new Bundle(); 
      b.putInt("pos", pos); 
      frag.setArguments(b); 
      return frag; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      mPos = getArguments().getInt("pos"); 
     } 

     @Override 
     public void onViewCreated(View view, Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 

      setListAdapter(new ArrayAdapter<String>(getSherlockActivity(), android.R.layout.simple_list_item_1, mItems)); 

      getListView().setOnScrollListener(new OnScrollListener() {    
       @Override 
       public void onScrollStateChanged(AbsListView view, int scrollState) { 

       } 

       @Override 
       public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
        Log.d(TAG, "onScroll() - Fragment: " + mPos); 
       } 
      }); 
     } 
    } 

} 
+0

Этот пример отлично подходит для меня и не похож на мою реализацию. Поэтому я должен пройти и удалить часть кода, пока не узнаю, что его нарушает. Благодарю. – Milo

+0

@Milo Вы когда-нибудь находили, в чем проблема? – brk3

Смежные вопросы