如何在列表中保存列表视图的所有内容?

时间:2016-12-13 11:05:51

标签: android listview sharedpreferences android-savedstate

我有一个片段,其中我放了一个listview从互联网获取其内容,当我点击一行并返回列表视图时它再次获取数据,但我想保持listview的最后状态,我该怎么办?那样做?

public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
    mRootView = inflater.inflate(R.layout.fragment_list, container, false);

    list = (ListView) mRootView.findViewById(R.id.mainList);
    footerView = ((LayoutInflater) G.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
            .inflate(R.layout.listfooter, null, false);
    mainInfoList = new ArrayList<MainInfo>();

    mainInfoAdapter = new AdapterMainInfo(getActivity(), R.id.mainList, mainInfoList);
    list.setAdapter(mainInfoAdapter);
}

...

1 个答案:

答案 0 :(得分:0)

这可以通过两种方式实现:

<强> 1。片段交易类型:这是没有漏洞的最佳方式。

使用add for fragment transaction而不是替换或删除。

<强>片段1&GT;&GT;(补充)&GT;&GT; Fragment2

在这种情况下,当您从fragment2返回到fragment1时,它的视图将不会再次创建。因为onCreateView不会再次调用。

<强> 2。代码管理

如果由于某些对您的应用程序很重要的工作,您只想使用替换或删除片段事务从fragment1到fragment2。

在onCreateView中做一件事,检查rootview。如果root视图为null,则创建一个新视图或保留那里发生的任何事情。

public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
    if(mRootView==null){
       mRootView = inflater.inflate(R.layout.fragment_list, container, false);
    }else {
        container.removeView(rootView);
    }
}