【问题标题】:How to save state of fragment in navigation drawer?如何在导航抽屉中保存片段的状态?
【发布时间】:2014-08-16 08:00:28
【问题描述】:

我在我的 android 应用程序中使用导航抽屉,当我重新选择片段时,它会加载两次。
这是我的代码

    private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
    case 0:
        // if(fraghome!=0)
        // {
        // fraghome=0;
        fragment = new HomeFragment();
        // }
        break;
    case 1:
        fragment = new BlogsFragment();
        break;
    case 2:
        fragment = new NewsFragment();
        break;
    case 3:
        fragment = new TransferFragment();
        break;
    case 4:
        fragment = new FixturesFragment();
        break;
    // case 5:
    // fragment = new BestXIFragment();

    // break;
    case 5:
        fragment = new FeedFragment();
        break;
    case 6:
        fragment = new TwitterFragment();
        break;
    case 7:
        fragment = new FacebookFragment();
        break;
    case 8:
        fragment = new BookmarkFragment();
        break;
    default:
        break;
    }

    if (fragment != null) {

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();
        ft.replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}

在每个片段中,我都在使用异步任务,当我选择片段时,异步任务一次又一次地启动
请帮帮我

【问题讨论】:

  • 您在代码中的哪里调用displayView
  • * */ private class SlideMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView> parent, View view, int position, long id) { // 显示所选导航抽屉项目的视图显示视图(位置); } }
  • 你能解释一下when i am reselecting fragment it loads twice.吗?你实际上是做什么的?你能讲故事吗?
  • 无论我在哪里选择片段异步任务再次开始加载
  • 谢谢!好消息!你能发布你在哪里调用异步任务吗?

标签: android android-fragments navigation-drawer


【解决方案1】:

通常在fragment中,如果不是当前顶部fragment或者当前顶部fragment的右边或左边的fragment,fragmen就会被销毁。所以 asynctask 被一次又一次地调用。 我假设您正在使用 asynctask 获取一些数据以显示在片段中。因此,在执行 asynctask 之前,请尝试将数据源变量设为静态并检查数据源变量是否为 null。如果数据源不为空,则显示数据。我添加了一些抽象代码供您理解。为了更好地理解你可以看到this link.希望它有所帮助。谢谢.....

在每个片段中.....

public class TabFragment extends Fragment{
    private static DataSource ds = null;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        /*
        .
        other view initializing work
        .
        */
        if(ds == null){
            //execute asynctask and set data to ds in asynctask
        } else {
            // set data to view.
        }
        return view;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2014-08-02
    • 1970-01-01
    相关资源
    最近更新 更多