如何在使用Tablayout和viewpager时从另一个片段调用AsyncTask?

问题描述:

我想从另一个片段调用AsyncTask,而不是我声明AsyncTask的类。我在viewpager中使用了自定义选项卡布局。标签布局包含四个选项卡。我想在选择特定选项卡时调用Web服务。所以我写了OnTabSelected()在我使用tablayout的主要片段中。我的AsyncTask在第二个选项卡中。我想在OnTabSelected()方法中选择第二个选项卡时调用webservice。我是android开发中的新手。那么如何能做到这一点?如何在使用Tablayout和viewpager时从另一个片段调用AsyncTask?

使用viewpager's addOnPageChangeListener事件是这样的:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 
       if(position == 1){ 
        //call your webservice here 
       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

注意,页面位置从0开始让你的第二个标签位置是1

编辑:如何获得当前片段的实例

Fragment f = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container); 
if (f instanceof SecondFragmentClass) { 
    f.doSomething(); 
} 

注意:如果您已提供标签

,您可以使用findFragmentByTag()代替findFragmentById

更新:

if(position == 1){ 
     Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + ViewPager.getCurrentItem()); 
     // based on the current position you can then cast the page to the correct 
     // class and call the method: 
     if (page != null) { 
       ((SecondFragmentClass)page).updateList("new item");  
     } 
    return true; 
    } 

检查这个答案更好understandig https://*.com/a/18611036/5895830

+0

我怎样才能把当前片段的实例是指执行任务的第二个片段? – vaibhav

+0

检查我更新的答案 –