如果到达列表末尾,如何实现刷新列表视图并在列表中引入新项目
how to implement refresh listview and bring new items in list if it reach end of list
我不知道如何实现刷新列表视图和添加新项目到列表(如果它到达我的父片段中的列表末尾)。我想我应该先解释一下我的fragments结构,因为我在githup上找到了一些教程甚至是库但是无法使用。我的片段的层次结构如下所示。我正在使用 中实现的 fragment pager adapter
。请考虑这一点。我开始我的异步任务,从 Parent Fragment
中的远程服务器获取列表项,然后用这些数据开始我的 child fragments
。之后此数据变为静态,直到用户再次启动 activity。我不要那个。如果滚动到列表末尾,我需要用户可以刷新列表并带来新项目。我感谢任何知道可以启发我的教程或代码的人。
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 fragments 有 2 个名为 FeedListFragment 和 FeedMapFragment 的子级。我现在如何检测 scrool 到达列表视图的末尾,然后启动一个新的异步任务以带来新项目并通知您的列表适配器。但是我的主要片段如何处理呢? Listfragment 可以在刷新或通过 getParentFragment 加载新项目时触发主框架。主要片段如何将这个新数据发送到已经膨胀的子片段?
提前致谢。帮我弄清楚。
这是我在到达列表视图末尾时加载更多项目的实现。这应该可以帮助您开始!
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;
}
}
});
我不知道如何实现刷新列表视图和添加新项目到列表(如果它到达我的父片段中的列表末尾)。我想我应该先解释一下我的fragments结构,因为我在githup上找到了一些教程甚至是库但是无法使用。我的片段的层次结构如下所示。我正在使用 fragment pager adapter
。请考虑这一点。我开始我的异步任务,从 Parent Fragment
中的远程服务器获取列表项,然后用这些数据开始我的 child fragments
。之后此数据变为静态,直到用户再次启动 activity。我不要那个。如果滚动到列表末尾,我需要用户可以刷新列表并带来新项目。我感谢任何知道可以启发我的教程或代码的人。
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 fragments 有 2 个名为 FeedListFragment 和 FeedMapFragment 的子级。我现在如何检测 scrool 到达列表视图的末尾,然后启动一个新的异步任务以带来新项目并通知您的列表适配器。但是我的主要片段如何处理呢? Listfragment 可以在刷新或通过 getParentFragment 加载新项目时触发主框架。主要片段如何将这个新数据发送到已经膨胀的子片段? 提前致谢。帮我弄清楚。
这是我在到达列表视图末尾时加载更多项目的实现。这应该可以帮助您开始!
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;
}
}
});