【问题标题】:Save Data in Android Fragment [duplicate]在 Android 片段中保存数据 [重复]
【发布时间】:2013-12-03 19:48:49
【问题描述】:

我的应用程序有一个类似的部分。每个部分解析来自不同 url 的 json 数据并将其显示在自定义列表视图上。现在,当我将第 2 节导航到第 3 节时。每个片段都显示数据,但是当导航 2 到 3 到 4 然后返回到 2 时。第 2 节再次从网络解析数据。

现在,是否可以保存数据(不在数据库中)。因此,如果我从 2 导航到 3 到 4,然后返回 2,它将不会再次解析数据。

【问题讨论】:

标签: android android-fragments


【解决方案1】:
Simply fallow undermentioned and let me know if you have any issues regarding same. I faced this problem:-

(1) Define a boolean value with value "false".
(2) Now when you are done with fetching data then simply change it to true.
(3) Now when you render back to any screen that have downloaded data simply check that value to be true/false. you will check same on OnCreateView. If value is false then let AsyncTask be run else wise don't allow AsyncTask to run.

For ex: 

<


if(vivek != true){
        new GoAsyncTask().execute();
        }else{

            gaa = new GoArrayAdapter(getActivity(), m_ArrayList);
            lv = (ListView) rootView.findViewById(R.id.go_list);
            lv.setVisibility(View.VISIBLE); 
            lv.setAdapter(gaa);

            lv.setOnItemClickListener(new OnItemClickListener() {

                @SuppressWarnings("static-access")
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    // TODO Auto-generated method stub
                    dh.open();
                    dh.updateSeenStatus(m_ArrayList.get(arg2).postid, 1);
                    dh.close();
                    m_ArrayList.get(arg2).isSeen = true;
                    GoDetail fragment = new GoDetail();
                    Bundle bundle = new Bundle();

                    bundle.putString("title", m_ArrayList.get(arg2).title);
                    bundle.putString("excert", m_ArrayList.get(arg2).excert);
                    bundle.putString("description", m_ArrayList.get(arg2).description);
                    bundle.putString("thumsrc", m_ArrayList.get(arg2).thumsrc);
                    bundle.putString("header_title", "Go");
                    //bundle.putInt("postid", m_ArrayList.get(arg2).postid);

                    fragment.setArguments(bundle);
                    ((BaseContainerFragment)getParentFragment()).replaceFragment(fragment, true);
                }
            });

        }
>

【讨论】:

    【解决方案2】:

    对于这些类型的布局和行为,以下组合一直是我的必胜者:

    Tabs + ViewPager + Fragments + Loader(specifically AsyncTaskLoader)
    

    Tabs + ViewPager 正在以您需要的方式呈现布局。您可能知道developer article,它展示了如何构建这种类型的布局。 ViewPager + Fragments,这里是 another dev article,它显示了如何设置它。

    Loaders 与 AsyncTask 相比的最大优势在于它知道在您重新创建活动或片段时保留数据,因此您无需再次询问它。数据加载与 UI 生命周期分离。描述加载器的developer article 是帮助您入门的最佳位置。您可以使用AsyncTaskLoader,因为它在某些方面类似于AsyncTask(实际上AsyncTaskLoader 使用AsyncTask

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2014-04-25
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      相关资源
      最近更新 更多