Android在ViewPager适配器中加载更多Listview

Android在ViewPager适配器中加载更多Listview,android,Android,我有ViewPager,在我的片段中有4个页面,并在pager适配器中打开ListView,它工作正常,现在,我为列表视图实现了Load More,当列表视图项目滚动结束时,Load More仅第一次自动工作,但从第二次开始,当列表视图项目滚动结束时,Load More不工作。请在此方面提供帮助:) 下面是我在我的PagerAdapter中实现加载更多的代码 @Override public Object instantiateItem(ViewGroup container, int

我有
ViewPager
,在我的片段中有4个页面,并在pager适配器中打开
ListView
,它工作正常,现在,我为
列表视图
实现了Load More,当
列表视图
项目滚动结束时,Load More仅第一次自动工作,但从第二次开始,当
列表视图
项目滚动结束时,Load More不工作。请在此方面提供帮助:)

下面是我在我的
PagerAdapter
中实现加载更多的代码

@Override
    public Object instantiateItem(ViewGroup container, int position)
    {
        final View view = getActivity().getLayoutInflater().inflate(R.layout.world_fragment_list, container, false);
        listview = (LoadMoreListView) view.findViewById(R.id.listView);
        listview.setAdapter(wfadapter);
        listview.setOnLoadMoreListener(new LoadMoreListView.OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                Log.e("Calling: ", "onLoadMore()");
                                  }
            }
        });
        container.addView(view);
        return view;
    }
我遵循教程,解决了上述问题

感谢@meynety对我的帮助。

我遵循了教程,解决了上述问题


感谢@meynety对我的帮助。

我在许多项目中都这样做,工作非常出色:

首先使用以下代码创建您的ViewPager类:

public class CategoryFragment extends Fragment {

    public static CategoryFragment newInstance() {
        return new CategoryFragment();
    }

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

        View rootView = inflater.inflate(R.layout.fragment_category, container, false);

        initViews(rootView);

        return rootView;
    }

    private void initViews(View rootView) {

        ViewPager mPager = (ViewPager) rootView.findViewById(R.id.vp_pager);
        mPager.setOffscreenPageLimit(4);
        CategoryAdapter mAdapter = new CategoryAdapter(getChildFragmentManager());
        mPager.setAdapter(mAdapter);

        PagerSlidingTabStrip mIndicator = (PagerSlidingTabStrip) rootView.findViewById(R.id.vp_indicator);
        mIndicator.setTypeface(FontHelper.getInstance(getActivity()).getPersianTextTypeface(), 0);
        mIndicator.setViewPager(mPager);
    }

    private class CategoryAdapter extends FragmentPagerAdapter {

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

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return AllCategoryFragment.newInstance();
                case 1:
                    return LatestVideoFragment.newInstance();
                case 2:
                    return PopularVideoFragment.newInstance();
                default:
                    return MostLikeVideoFragment.newInstance();
            }
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position){
                case 0:
                    return getResources().getString(R.string.drawer_title_category);
                case 1:
                    return getResources().getString(R.string.drawer_title_latest_video);
                case 2:
                    return getResources().getString(R.string.drawer_title_popular_video);
                default:
                    return getResources().getString(R.string.drawer_title_most_liked_video);
            }
        }
    }
}
然后创建您的BaseFragment类(这里我只放了其中一个):

公共抽象类BaseListFragment扩展片段实现AdapterView.OnItemClickListener{
受保护的布尔加载更多,调用请求,isVisibleHint,firstRequest=true;
私有分页列表视图mListView;
private ProgressView McRourcularProgress;
私有进程查看进程;
私人定制页面;
专用BaseListAdapter mAdapter;
private int mPageRequest=1;
公共抽象字符串getType();
公共抽象字符串getCategorySlug();
公共抽象字符串getCategoryId();
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.fragment\u base\u列表,容器,false);
initViews(rootView);
if(isVisibleHint&&firstRequest){
firstRequest=false;
启用();
}
返回rootView;
}
受保护的void initViews(视图根视图){
mLinearProgress=(ProgressView)rootView.findviewbyd(R.id.pvl_加载);
mccircularprogress=(ProgressView)rootView.findviewbyd(R.id.pvc_加载);
mcorcularprogress.start();
mListView=(PagingListView)rootView.findviewbyd(R.id.lv_分页);
mAdapter=newBaseListAdapter(getActivity());
mListView.setOnItemClickListener(此);
}
公共无效性能搜索(){
callingRequest=true;
如果(!加载更多){
if(mcorcularprogress!=null)
mcorcularprogress.start();
mCustomPage.setVisibility(View.GONE);
如果(mAdapter!=null)
mAdapter.removeAllItems();
mPageRequest=1;
}
如果(mPageRequest>1){
mLinearProgress.start();
}
ServiceHelper.getInstance().searchQuery(getCategoryId(),getCategorySlug(),null,null,getType(),null,mPageRequest).排队(新回调(){
@凌驾
公共响应(响应){
callingRequest=false;
过程响应(response);
}
@凌驾
失效时的公共无效(可丢弃的t){
processResponse(null);
}
});
}
public void resetPerformSearch(布尔调用服务){
加载更多=错误;
mPageRequest=1;
如果(呼叫服务)
performSearch();
}
私有void enable(){
mListView.setPagingTableListener(新建PagingListView.PagingTable()){
@凌驾
public void onLoadMoreItems(){
loadingMore=true;
如果(!callingRequest)
performSearch();
}
});
mListView.setAdapter(mAdapter);
mListView.setHasMoreItems(true);
}
私有void processResponse(响应){
if(response!=null&&response.body()!=null&&response.body().size()>0){
mListView.onfinishload(true,response.body());
}else if(mPageRequest==1){
//显示错误
}否则{
mListView.setHasMoreItems(false);
加载更多=错误;
}
mPageRequest++;
//停止加载
}
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
startActivity(VideoDetailsActivity.createIntent(getActivity(),mAdapter.getItem(position).getId());
}
@凌驾
public void setUserVisibleHint(布尔值isVisibleToUser){
super.setUserVisibleHint(isVisibleToUser);
如果(isVisibleToUser){
d(“片段”,“可见片段:”+getClass().getSimpleName());
isVisibleHint=true;
if(firstRequest&&getView()!=null){
firstRequest=false;
启用();
}
}
}
}
现在只需创建扩展BaseFrgament的类即可


您还可以查看我的LoadMoreListView

我在许多项目中都这样做,工作非常出色:

首先使用以下代码创建您的ViewPager类:

public class CategoryFragment extends Fragment {

    public static CategoryFragment newInstance() {
        return new CategoryFragment();
    }

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

        View rootView = inflater.inflate(R.layout.fragment_category, container, false);

        initViews(rootView);

        return rootView;
    }

    private void initViews(View rootView) {

        ViewPager mPager = (ViewPager) rootView.findViewById(R.id.vp_pager);
        mPager.setOffscreenPageLimit(4);
        CategoryAdapter mAdapter = new CategoryAdapter(getChildFragmentManager());
        mPager.setAdapter(mAdapter);

        PagerSlidingTabStrip mIndicator = (PagerSlidingTabStrip) rootView.findViewById(R.id.vp_indicator);
        mIndicator.setTypeface(FontHelper.getInstance(getActivity()).getPersianTextTypeface(), 0);
        mIndicator.setViewPager(mPager);
    }

    private class CategoryAdapter extends FragmentPagerAdapter {

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

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return AllCategoryFragment.newInstance();
                case 1:
                    return LatestVideoFragment.newInstance();
                case 2:
                    return PopularVideoFragment.newInstance();
                default:
                    return MostLikeVideoFragment.newInstance();
            }
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position){
                case 0:
                    return getResources().getString(R.string.drawer_title_category);
                case 1:
                    return getResources().getString(R.string.drawer_title_latest_video);
                case 2:
                    return getResources().getString(R.string.drawer_title_popular_video);
                default:
                    return getResources().getString(R.string.drawer_title_most_liked_video);
            }
        }
    }
}
然后创建您的BaseFragment类(这里我只放了其中一个):

公共抽象类BaseListFragment扩展片段实现AdapterView.OnItemClickListener{
受保护的布尔加载更多,调用请求,isVisibleHint,firstRequest=true;
私有分页列表视图mListView;
private ProgressView McRourcularProgress;
私有进程查看进程;
私人定制页面;
专用BaseListAdapter mAdapter;
private int mPageRequest=1;
公共抽象字符串getType();
公共抽象字符串getCategorySlug();
公共抽象字符串getCategoryId();
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气