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上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气