Android 返回时活动缺少数据

Android 返回时活动缺少数据,android,Android,所以我有一个主要的活动,它有一个列表视图,还有一个地图,它保存了列表中的所有数据。单击某个项目后,您将进入详细信息显示。当我按下“上一步”按钮从“详细信息”活动返回到主活动时,如果我设置了断点,我的贴图键仍然保持不变,但对象中的所有字符串都是“”,整数都是-1。以下是我的主要活动: public class MainActivity extends Activity { private Map<String, Stunt> stunts = new LinkedHashMap

所以我有一个主要的活动,它有一个列表视图,还有一个地图,它保存了列表中的所有数据。单击某个项目后,您将进入详细信息显示。当我按下“上一步”按钮从“详细信息”活动返回到主活动时,如果我设置了断点,我的贴图键仍然保持不变,但对象中的所有字符串都是“”,整数都是-1。以下是我的主要活动:

public class MainActivity extends Activity {
    private Map<String, Stunt> stunts = new LinkedHashMap<String, Stunt>();
    private StuntsDao stuntsDao;
    private ListAdapter listAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        stuntsDao = new StuntsDao(getApplicationContext());     

        stunts = stuntsDao.getAllStunts();

        listAdapter = new ListAdapter(this, R.layout.list_layout, new ArrayList<Stunt>(stunts.values()));
        ListView listView = (ListView)findViewById(R.id.listView);

        listView.setAdapter(listAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String stuntName = (String)((ViewHolder)view.getTag()).stuntName.getText();
                Intent myIntent = new Intent(getApplicationContext(), StuntDetails.class);
                getStuntDetailsIfNeeded(stuntName);
                Stunt stunt = stunts.get(stuntName);
                myIntent.putExtra("STUNT", stunt);
                startActivity(myIntent);
            }
        });
    }
...

}
公共类MainActivity扩展活动{
私有地图特技=新建LinkedHashMap();
私人特技;
私有ListAdapter ListAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
stuntsDao=新的stuntsDao(getApplicationContext());
stunts=stuntsDao.getAllStunts();
listAdapter=newListAdapter(这个,R.layout.list_布局,newArrayList(stunts.values());
ListView ListView=(ListView)findViewById(R.id.ListView);
setAdapter(listAdapter);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
String stuntName=(String)((ViewHolder)view.getTag()).stuntName.getText();
Intent myIntent=newintent(getApplicationContext(),StuntDetails.class);
GetStuntDetailSifRequired(stuntName);
特技特技=特技。获取(特技名称);
myIntent.putExtra(“特技”,特技);
星触觉(myIntent);
}
});
}
...
}

为什么我的地图中的对象基本上是空的?

onCreate()在单击“上一步”时不会被调用。您需要在onStart或onResume中再次初始化数据。请参阅:

这可能与单击“上一步”时未调用onCreate()有关吗?这正是我所考虑的,因此我实现了onSaveInstanceState和onRestoreInstanceState方法,但没有任何帮助。但是是的,onRestoreInstanceSave和onCreate方法在返回时不会被调用。这些方法用于方向改变时。没有办法保存我的地图,所以我不必再次从数据库中获取它吗?有办法。请看这里:但我认为SQLite可能是最好的方法。您可以扩展自己的应用程序类,将数据存储在那里以供测试之用,但这是一种代码气味:您的应用程序可能内存不足。实现一个好的数据库可能就是你想要的。别忘了数据获取可能应该在一个单独的线程中完成,比如异步任务。谢谢你的建议,我会这样做的。