我不知道如何实现刷新列表视图并将新项目添加到列表中,如果它到达我父片段中的列表末尾。我想我应该首先解释我的片段结构,因为我在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提前。帮我弄明白。
答案 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;
}
}
});