Android 从actionBar.addTab(tab,true)调用onCreateView中的asynctask只会钩住最后一个调用的onPostExecute

Android 从actionBar.addTab(tab,true)调用onCreateView中的asynctask只会钩住最后一个调用的onPostExecute,android,android-asynctask,android-actionbar,android-viewpager,Android,Android Asynctask,Android Actionbar,Android Viewpager,所以我遇到的问题是,我在一个标签列表上循环,然后调用 actionBar.addTab(t,true) //which will force the app to basically call onTabSelected() for each tab 然后,每个选项卡实例化一个片段,在onCreateView()上的片段内,我为每个片段触发一个asynctask。每个片段都是相同的类子类片段。它们是相同类型类的各自实例 现在的问题是,如果我有3个选项卡,比如“最近、趋势、编辑选择”,那么在我进

所以我遇到的问题是,我在一个标签列表上循环,然后调用

actionBar.addTab(t,true) //which will force the app to basically call onTabSelected() for each tab
然后,每个选项卡实例化一个片段,在onCreateView()上的片段内,我为每个片段触发一个asynctask。每个片段都是相同的类子类片段。它们是相同类型类的各自实例

现在的问题是,如果我有3个选项卡,比如“最近、趋势、编辑选择”,那么在我进入onPostExecute之前,执行流程是正常的。。为什么它只在PostExecute上调用“编辑选择”3次。这就像asynctask的onPostExecute被最后一个选项卡覆盖一样。顺序是最近的,趋势性的,最后是编辑的选择。被称为“最后一个”的内容就是渲染的内容

这是我的日志:

I/reid    (  514): onPreExeucte:Recent
I/reid    (  514): DoInBackground:Recent
I/reid    (  514): onCreateView: Recent
I/reid    (  514): onPreExeucte:Trending
I/reid    (  514): onCreateView: Trending
I/reid    (  514): DoInBackground:Trending
I/reid    (  514): onPreExeucte:Editor's Picks
I/reid    (  514): DoInBackground:Editor's Picks
I/reid    (  514): onCreateView: Editor's Picks
I/reid    (  514): onPostExecute:Editor's Picks
I/reid    (  514): onPostExecute:Editor's Picks
I/reid    (  514): onPostExecute:Editor's Picks
这是情节片段的代码

public class EpisodeTileFragment extends Fragment {
    public List<Episode> _episodes = new ArrayList<Episode>();
    int offset = 0;
    ListView list;
    ListEpisodesAdapter adapter;
    static String showName, tabName;
    OnEpisodesLoadedListener mCallback;
    static EpisodeTileFragment f;
    View v;

    public interface OnEpisodesLoadedListener {
        public void isEpisodesLoaded(View v);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.episode_tiles, container, false);
        v.setVisibility(View.GONE);

        list = (ListView)v;

            _episodes.clear();
            tabName = getArguments().getString("show", "not set");
            new LoadEpisodesTask().execute(tabName);
            Log.i("Reid","arguments: episodeTileFragment: " + getArguments().getString("show", "not set"));
        return v;
    }


    public static EpisodeTileFragment newInstance(String text) {
        f = new EpisodeTileFragment();
        Bundle b = new Bundle();
        b.putString("title", text);
        f.setArguments(b);
        return f;
    }
    private final class LoadEpisodesTask extends AsyncTaskEx<String, Episode, IOperationResult> {
        @Override
        protected void onPreExecute() {
            Log.i("reid","onPreExeucte:" + tabName);
        }
        @Override
        protected IOperationResult doInBackground(String... s) {
            IPaginatedProgressListener<Episode> listener = new IPaginatedProgressListener<Episode>() {
                @Override
                public void publishProgress(Episode progress) {
                    LoadEpisodesTask.this.publishProgress(progress);
                }
                @Override
                public void setTotal(int total) {
                }
            };
            offset = _episodes.size();
            String GroupingType = "latest";
            if(s[0].equalsIgnoreCase(getResources().getString(R.string.title_section3))){
                GroupingType = "trending";
            } 

            Log.i("reid","DoInBackground:" + tabName);
            return API.get().getEpisodes(listener, offset, 25, GroupingType);
            //          return API.get().getEpisodesByShow(listener, show, offset, 25);
        }

        @Override
        protected void onProgressUpdate(Episode... values) {
            _episodes.add(values[0]);
        }

        @Override
        protected void onPostExecute(IOperationResult result) {
            if(_episodes != null) {
                adapter = new ListEpisodesAdapter(getActivity(), R.layout.episode_tile, _episodes, false);
                list.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                mCallback.isEpisodesLoaded(v);
                Log.i("reid","onPostExecute:" + tabName);
            }
        }
    }
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        try {
            mCallback = (OnEpisodesLoadedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnEpisodesLoadedListener");
        }
    }
公共类eposodelefragment扩展片段{
公共列表_septions=new ArrayList();
整数偏移=0;
列表视图列表;
李斯特管接头;
静态字符串showName,tabName;
OnEpisodesLoadedListener mCallback;
静态幕式反射f;
观点五;
公共接口OnEpisodesLoadedListener{
已加载公共空间(视图五);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
v=充气机。充气(R.布局图。插曲_瓷砖,容器,假);
v、 设置可见性(View.GONE);
列表=(列表视图)v;
_片段。清除();
tabName=getArguments().getString(“显示”、“未设置”);
新建LoadEpsodesTask().execute(tabName);
Log.i(“Reid”,“arguments:eposodeleFragment:”+getArguments().getString(“show”,“not set”));
返回v;
}
publicstaticeposodelefragment新实例(字符串文本){
f=新的表皮皱褶();
Bundle b=新Bundle();
b、 putString(“标题”,文本);
f、 设置参数(b);
返回f;
}
私有最终类LoadEpsodesTask扩展了AsyncTaskEx{
@凌驾
受保护的void onPreExecute(){
Log.i(“reid”,“onPreExecute:”+tabName);
}
@凌驾
受保护的IOperationResult doInBackground(字符串…s){
IPaginatedProgressListener=新的IPaginatedProgressListener(){
@凌驾
public void publishProgress(情节进度){
loadPostedTask.this.publishProgress(progress);
}
@凌驾
公共无效集合总计(整数总计){
}
};
偏移量=_.size();
字符串GroupingType=“最新”;
if(s[0].equalsIgnoreCase(getResources().getString(R.string.title_section3))){
GroupingType=“趋势”;
} 
Log.i(“reid”,“DoInBackground:+tabName”);
返回API.get().getSpices(listener,offset,25,GroupingType);
//返回API.get().geteposodesbyshow(listener、show、offset、25);
}
@凌驾
受保护的void onProgressUpdate(事件…值){
_添加(值[0]);
}
@凌驾
受保护的void onPostExecute(IOperationResult){
如果(_!=null){
adapter=新的ListPiSodeAdapter(getActivity(),R.layout.eposition\u tile,\u epositions,false);
list.setAdapter(适配器);
adapter.notifyDataSetChanged();
mCallback.isEpisodesLoaded(v);
Log.i(“reid”,“onPostExecute:”+tabName);
}
}
}
@凌驾
公共事务主任(活动){
超级转速计(活动);
试一试{
mCallback=(OnEpisodesLoadedListener)活动;
}catch(ClassCastException e){
抛出新的ClassCastException(activity.toString()
+“必须实现OnEpisodesLoadedListener”);
}
}

发布片段的代码。使用片段代码更新。它们是相同类型类的各自实例。您这样说,但出于某些原因,您保留了对片段的静态引用。我只是按照我在developer.android.com上读到的内容。如果我不使用addTab(t,true),而只使用addTab(t);我点击每个选项卡,所有内容都正常呈现,一切都按预期工作。只是当我有addTab(t,true)时,它会在OnAbsElected()上循环,而片段不起作用。我想我想说的是,为什么addTab(t,true)在循环中时这不起作用,而不是物理地点击每个选项卡来调用OnAbsElected()正如我所说的,你在片段中使f,showName和tabName是静态的吗?