我有MainActivity,它使用SherlockFragment扩展了SherlockFragmentActivity和两个标签。这两个选项卡具有由AsyncTask填充的ListView。一切正常,但每当我从tab切换到tab时,AsyncTask再次触发,我只想启动它一次。
这是我的MainActivity:
public class MainActivity extends SherlockFragmentActivity {
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.tabcontent);
mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab1"),Tab1.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"),Tab2.class, null);
}
这里是Tab1:
public class Tab1 extends SherlockFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab1, container, false);
return v;
}
@Override
public void onStart() {
super.onStart();
// TODO Auto-generated method stub
new FetchData().execute();
}
public class FetchData extends AsyncTask<String, String, String> {
.....
}
}
Tab2包含类似的代码,只是用不同的mysql选择。一切正常,数据填充在ListView上,但每次我从tab1切换到tab2时,AsyncTask再次触发:/请帮助......
答案 0 :(得分:1)
每次片段变得可见时都会调用onStart方法,例如切换标签时
来源:Android fragment life cycle
我建议你搬家:
new FetchData().execute();
进入onCreateView方法。
答案 1 :(得分:0)
我通过下载所有数据并存储在本地sqlite中来解决问题。这样,每个片段都不需要AsyncTask。
干杯!