2013-01-23 13 views
5

Biblioteki:Czy funkcja PullToRefresh działa z FragmentPagerAdapter?

w próbce PullToRefreshListInViewPagerActivity działa tylko z PageAdapter.

Nie mogłem znaleźć sposobu, aby to zadziałało z FragmentPageAdapter.

Próbka:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ptr_list_in_vp); 

     mViewPager = (ViewPager) findViewById(R.id.vp_list); 
     mViewPager.setAdapter(new ListViewPagerAdapter()); 
    } 

    private class ListViewPagerAdapter extends PagerAdapter { 

     @Override 
     public View instantiateItem(ViewGroup container, int position) { 
      Context context = container.getContext(); 

      PullToRefreshListView plv = (PullToRefreshListView) LayoutInflater.from(context).inflate(
        R.layout.layout_listview_in_viewpager, container, false); 

      ListAdapter adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, 
        Arrays.asList(STRINGS)); 
      plv.setAdapter(adapter); 

      plv.setOnRefreshListener(PullToRefreshListInViewPagerActivity.this); 

      // Now just add ListView to ViewPager and return it 
      container.addView(plv, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

      return plv; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      container.removeView((View) object); 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view == object; 
     } 

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

    } 

    @Override 
    public void onRefresh(PullToRefreshBase<ListView> refreshView) { 
     new GetDataTask(refreshView).execute(); 
    } 

    private static class GetDataTask extends AsyncTask<Void, Void, Void> { 

     PullToRefreshBase<?> mRefreshedView; 

     public GetDataTask(PullToRefreshBase<?> refreshedView) { 
      mRefreshedView = refreshedView; 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // Simulates a background job. 
      try { 
       Thread.sleep(4000); 
      } catch (InterruptedException e) { 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      mRefreshedView.onRefreshComplete(); 
      super.onPostExecute(result); 
     } 
    } 

} 

Odpowiedz

3

Możesz dodać ListFragment do FragmentPageAdapter (lub FragmentStatePageAdapter) i dodać funkcję Pull-to-Refresh na nim.

Repozytorium Android-PullToRefresh ma przykład o numerze ListFragment.

Witryna Android Developers zawiera przykładowy kod na temat tworzenia FragmentPagerAdapter lub FragmentStatePagerAdapter.

Można również spojrzeć na mojego projektu badawczego: https://github.com/caiguanhao/FSPAtest

+0

miły człowiek, dzięki za próby, działa bardzo dobrze i proste do zrozumienia. – Marckaraujo

+0

+1 thnx człowiek, zrobiłeś mój dzień –

Powiązane problemy