使用SherlockFragments在变量选项卡上再次启动AsyncTask

时间:2013-08-10 16:26:31

标签: android android-asynctask fragment android-tabhost

我有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再次触发:/请帮助......

2 个答案:

答案 0 :(得分:1)

每次片段变得可见时都会调用onStart方法,例如切换标签时

来源:Android fragment life cycle

我建议你搬家:

new FetchData().execute();

进入onCreateView方法。

答案 1 :(得分:0)

我通过下载所有数据并存储在本地sqlite中来解决问题。这样,每个片段都不需要AsyncTask。

干杯!