如何在使用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://stackoverflow.com/a/18611036/5895830
我怎样才能把当前片段的实例是指执行任务的第二个片段? – vaibhav
检查我更新的答案 –