【问题标题】:Is the asynctask always executed when swiping through fragments?在浏览片段时是否总是执行异步任务?
【发布时间】:2014-01-08 14:22:29
【问题描述】:

基本上我的代码与here 描述的代码完全相同:

在每个片段中,我都有不同的异步任务,它只是从网站获取数据。 它看起来像这样:

TextView text;
String content;
View today;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    today = inflater.inflate(R.layout.today, container, false);
    text = (TextView) today.findViewById(R.id.textView);
    // ((TextView) today.findViewById(R.id.textView)).setText("Today");

    new RetriveSiteData().execute("http://menza.lupajz.eu/?den=dnes");

    content = (String) text.getText();

    return today;
}

我想知道如果 TabPagerAdapter 类(在网站上),是否总是获取数据,同时在片段中滑动 这个方法是否以相同的方式实现

@Override
public Fragment getItem(int i) {
    switch (i) {
    case 0:
        //Fragement for Android Tab
        return new Android();
    case 1:
       //Fragment for Ios Tab
        return new Ios();
    case 2:
        //Fragment for Windows Tab
        return new Windows();
    }
    return null;
}

如果始终获取数据并且始终执行异步任务,我该如何防止这种情况发生?也许为每个片段添加一些 onResume() 方法?

【问题讨论】:

  • 把你的逻辑(异步任务)放在片段的onStart() 方法中。看看有没有变化。确保覆盖这些方法。

标签: android android-fragments android-asynctask


【解决方案1】:

基本上你有两个选择:

  1. 在包含视图分页器的活动中只执行一次异步任务,然后将数据传递给您的片段。你也可以通过一些延迟加载来做到这一点。

  2. 使用 ViewPager.setOffscreenPageLimit(int) 函数设置要保留在视图分页器中的片段数。默认值设置为 1,因此每次切换时都会调用 getItem() 方法。但我不建议使用此选项,尤其是当您有复杂且消耗内存的视图时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多