Android生命周期 - 数据无法重新加载

时间:2012-08-23 03:15:00

标签: android android-listview android-lifecycle

我一直试图弄清楚是什么导致我的应用程序丢失了两个ListView中的数据,两个选项卡各有一个ListFragment s。当您将应用程序带到最前端时,ListView在手机上随机为空。

我猜测我在备份应用程序时缺少了如何恢复数据的内容。通常,应用程序恢复和两个选项卡中的数据都在那里。

然而,仅在真实的手机上,数据将从ListView消失,但我找不到可重复的模式。

我已经使用DDMS来模拟许多组合中的垃圾收集,我无法重现数据丢失。这是我如何处理生命周期,简化和基本上完全伪代码。

我查看了生命周期结构,并认为我已经开始工作了。

我刷新不正确吗?

主要活动

public class MyActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // I don't refresh here
        // add both tabs to the tab adapter
    }

    public void onRestart() {
        super.onRestart(); 
        reloadTab1();
        reloadTab2();
    }
}

标签1

public class MyTab1 extends ListFragment {
    static MyTab1Adapter mAdapter;
    ArrayList<MyObject> mItems;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // retain state
        setRetainInstance(true);
        reloadTab1(getActivity());
    }

    public void reloadTab1(Context context) {
        mItems = updateItems();

        if (mAdapter == null) {
            mAdapter = new MyTab1Adapter(context, R.layout.tab1, mItems);
            setListAdapter(mAdapter);
        }           
        else {
            mAdapter.setNewList(mItems);
            mAdapter.notifyDataSetChanged();
        }
    }
}

标签2

public class MyTab2 extends ListFragment {
    static MyTab2Adapter mAdapter;
    ArrayList<MyObject> mItems;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // retain state
        setRetainInstance(true);
        reloadTab2(getActivity());
    }

    public void reloadTab2(Context context) {
        mItems = updateItems();

        if (mAdapter == null) {
            mAdapter = new MyTab2Adapter(context, R.layout.tab2, mItems);
            setListAdapter(mAdapter);
        }           
        else {
            mAdapter.setNewList(mItems);
            mAdapter.notifyDataSetChanged();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码中有一个小错字,您使用了onRestart回调,但是从超类而不是onResume调用了super.onRestart();方法。