导航抽屉碎片在选择时被重新创建,导致重复的图像下载



我的应用程序目前有一个导航抽屉,里面有一些碎片。最初加载的默认片段是从服务器下载图像(位图)的配置文件页面。

当我导航到另一个片段并返回到Profile片段时,该片段将被重新创建,并且图像必须从服务器上重新下载。

有没有办法保存Profile Fragment的状态,这样我就不必一直向服务器发送重新下载映像的请求。目前,由于需要进行重复的下载请求,UI感觉非常笨重。

以下是启动相关片段的"活动"的代码摘录。

public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;

    switch(position+1) {
        case 1:
            Bundle LoginDetails = getIntent().getExtras();
            String [] login_info = LoginDetails.getStringArray("login_details");
            String username = login_info[0];
            String password = login_info[1];
            fragment = new Profile().newInstance(position + 1, username, password);
            break;
        case 2:
            fragment = new Search().newInstance(position+1);
            break;
        case 3:
            fragment = new NewsFeed().newInstance(position+1);
            break;

        default:
            Log.w(this.getClass().getSimpleName(), "Reached default on Navigation Drawer select item");
            break;
    }
    //fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
    if (fragment != null) {
        FragmentTransaction fragmentManager = getFragmentManager().beginTransaction();
        fragmentManager.replace(R.id.container, fragment);
        fragmentManager.addToBackStack(null);
        fragmentManager.commit();
    }
    else {
        Log.e("Activity", "Error Creating fragment");
    }
}

我的Profile.java文件(Fragment)随后在onCreateView中使用AsyncTask调用来下载配置文件映像。我应该在其他地方进行这个调用,还是有其他方法来保持碎片布局的状态?

最好的方法是在本地缓存您的图像,您可以手动进行,也可以使用一些漂亮的库,如Picasso或Ion,然后当您的片段被重新创建时,您将从缓存中获得该图像。

但是,如果您不想使用它,还有另一种方法可以存储图像:您可以将加载图像的AsyncTask移动到使用NavigationDrawerActivity,然后执行AsyncTask,例如,在onCreate中,将图像存储在活动中,当您将当前片段替换为ProfileFragment时,将图像作为参数传递给newInstance方法。然后,图像将被存储以供您的NavigationDrawerActivity生命周期使用。

最新更新