【问题标题】:ListView OnScrollListener doesn't get called inside a ViewPagerListView OnScrollListener 不会在 ViewPager 中被调用
【发布时间】:2013-03-06 18:53:05
【问题描述】:

我有一个FragmentPagerAdapter 创建它的子页面(即ListFragments),如下所示:

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

我给 ViewPager 一个OffscreenPageLimit 1。孩子ListFragments 有一个自定义ScrollListener

我遇到的问题是自定义滚动侦听器仅适用于当 ViewPager 滑过其 OffscreenPageLimit 时创建的子 ListFragments,即子页面 > 2。

更令人困惑的是,如果我滚动了几页,然后返回到滚动侦听器现在工作的第一页。

这里发生了什么?似乎ViewPager 干扰了一些子页面OnScrollListener

谢谢

【问题讨论】:

    标签: android android-viewpager android-listfragment onscroll


    【解决方案1】:

    试试这个。为我工作!

    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);
                    }
                });
            }
        }
    
    }
    

    【讨论】:

    • 这个例子对我来说很好,看起来与我的实现没有什么不同。因此,我必须仔细检查并删除部分代码,直到找出破坏它的原因。谢谢。
    • @Milo 你有没有发现问题到底出在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2018-07-01
    • 1970-01-01
    • 2020-02-10
    相关资源
    最近更新 更多