2015-01-28 2 views
0

새로 고침 listview를 구현하고 상위 항목의 목록 끝에 도달하면 목록에 새 항목을 추가하는 방법을 모르겠습니다. 제 조각을 먼저 설명해야한다고 생각합니다. 자습서 나 심지어 라이브러리를 발견했지만 사용할 수 없기 때문입니다. 내 파편의 계층 구조는 아래와 같습니다. 그리고 This Question에 구현 된대로 fragment pager adapter을 사용하고 있습니다. 이것을 고려하십시오. 원격 서버의 목록 항목을 Parent Fragment에 가져 오기 위해 비동기 작업을 시작하고이 데이터로 내 child fragments을 시작합니다. 그런 다음이 데이터는 사용자가 활동을 다시 시작할 때까지 정적이됩니다. 나는 그것을 원하지 않는다. 사용자가 목록을 새로 고침하고 스크롤이 목록의 끝에 도달하면 새 항목을 가져와야합니다. 튜토리얼이나 나에게 영감을 줄 수있는 코드를 아는 분이라면 고맙겠습니다. 새로 고침 listview를 구현하고 목록의 끝에 도달하면 목록에 새 항목 가져 오기

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); 
     } 
    } 

당신이 내 코드에서 볼 수 있듯이, 홈페이지 조각 FeedListFragment 및 FeedMapFragment라는 2 명의 아이들이있다. 이제 scrool이 listview 끝에 도달하는 것을 감지 한 다음 새 asyntask에 별표를 추가하여 새 항목을 가져와 목록 어댑터에 알립니다. 하지만 어떻게 내 주요 조각이 그것을 관리 할 수 ​​있습니까? ListFragment는 새로 고침 또는 getParentFragment에 의한 새 항목로드시 주요 프라그먼트를 트리거 할 수 있습니다. 주 조각이이 새 데이터를 자식 조각으로 보내는 방법 whisch은 이미 팽창 했습니까? Thansk 사전에. 그 점을 이해하도록 도와주세요.

+0

그것은 이미 답이 여기에 정보 [안드로이드 풀 - 투 - 새로 고침을 구현하는 방법 (http://stackoverflow.com/questions/4583484/how-to-implement-android-pull-to-refresh) – blizzard

+0

전 근심이 내 질문을 업데이트했습니다. 그것을 보아라. – eskimoo

답변

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; 
      } 
     } 
    }); 
관련 문제