如何到达列表末尾,如何实现刷新列表视图并将新项目列入列表

时间:2015-01-28 19:02:45

标签: android listview pull-to-refresh fragmentpageradapter

我不知道如何实现刷新列表视图并将新项目添加到列表中,如果它到达我父片段中的列表末尾。我想我应该首先解释我的片段结构,因为我在githup上找到了一些教程甚至库但是无法使用它们。我的片段的层次结构如下所示。我在This Question中使用了fragment pager adapter。请考虑这一点。我开始执行异步任务以从Parent Fragment中的远程服务器中获取列表项,然后使用此数据启动child fragments。之后,此数据将变为静态,直到用户再次启动活动。我不要那个。我需要用户可以刷新列表,如果滚动到达列表末尾,也会带来新项目。我感谢任何知道教程或能够激发我灵感的代码的人。

MainActivity -> MainFragment --> Child Fragment1
                             --> Child Fragment2

更新:

pieace of code form my MainFragment

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

        ...
        rootView = inflater.inflate(R.layout.fragmentfeed2, container, false);
        ...
         startAsyncTask();// to bring List Object whish will be show in feed list and map
        return rootView;
}

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
        mViewPager.setAdapter(new PlacesDisplayTypePagerAdapter(getChildFragmentManager()));
        mViewPager.setOffscreenPageLimit(2);
        mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
        mSlidingTabLayout.setViewPager(mViewPager);
        mSlidingTabLayout.setHostingFragment(this);
        mSlidingTabLayout.setSelectedIndicatorColors(getActivity().getResources().getColor(R.color.sow_actionbar_bg_color));

        if(getArguments() != null)
        {
            int currentTab = getArguments().getInt("1");
            mViewPager.setCurrentItem(currentTab);
        }
    }

class PlacesDisplayTypePagerAdapter extends FragmentPagerAdapter {
        public PlacesDisplayTypePagerAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return message(R.string.tab_list);
                case 1:
                    return message(R.string.tab_map);
                default:
                    return message(R.string.tab_list);
            }
        }

        @Override
        public Fragment getItem(int position) {
            Bundle bundle = new Bundle();
            bundle.putParcelableArrayList(Consts.bundle_adList, (ArrayList<? extends Parcelable>) events);
            bundle.putInt("startFrom", startFrom);
            bundle.putInt("listType", listType);
            bundle.putDoubleArray(Consts.bundle_locArray, targetLoc);
            if (position == 0) {
                return FeedListFragment.newInstance(bundle);
            } else
                return FeedMapFragment.newInstance(bundle);
        }
    }

从我的代码中可以看出,Main片段有两个名为FeedListFragment和FeedMapFragment的子代。我现在如何检测scrool到达listview的结尾,然后为一个新的asyntask加注新项目并通知你的列表适配器。但我的主要片段如何管理呢? Listfragment可以在刷新或通过getParentFragment加载新项目时触发主要框架。主要片段如何将这些新数据发送到儿童片段上已经充气? Thansk提前。帮我弄明白。

1 个答案:

答案 0 :(得分:0)

这是我在达到列表视图结尾时加载更多项目的实现。这应该可以帮助你开始!

myListView.setOnScrollListener(new OnScrollListener() {
        private int lastVisibleItem;
        private int totalItemCount;
        private boolean isEndOfList;

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            this.totalItemCount = totalItemCount;
            this.lastVisibleItem = firstVisibleItem + visibleItemCount - 1;
            // prevent checking on short lists
            if (totalItemCount > visibleItemCount)
                checkEndOfList();
        }

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // state doesn't matter
        }

        private synchronized void checkEndOfList() {
            // trigger after 2nd to last item
            if (lastVisibleItem >= (totalItemCount - 2)) {
                if (!isEndOfList) {
                    // LOAD MORE ITEMS HERE!
                }
                isEndOfList = true;
            } else {
                isEndOfList = false;
            }
        }
    });