Java Listview在安装更改时被销毁
所以,我有一个简单的应用程序,它可以跟踪我一天摄入的卡路里和脂肪,并为我计算它们的总数。在纵向方向上工作得非常出色,但当我进入横向时,listview被破坏,而且阵列适配器似乎也是空的。我对StackOverflow很感兴趣,并尝试了几个答案,但没有一个有效。我的印象是,当方向改变时,活动在onCreate中被重新创建,listView将从那里重新填充 我尝试过的一些解决方案 1.我自己处理Orentan的变化 通过覆盖根据此SO答案更改的OnConfiguration 2.重写onResume以重新创建listview 关于这个解决方案,我不了解的是,据我所知,onResume在onCreate之后被调用,所以listview已经被重新创建了 3.引用此simalar应用程序的开放源代码使用上述onResume方法 我认为oncreate中有一些错误,下面是代码Java Listview在安装更改时被销毁,java,android,listview,android-listview,Java,Android,Listview,Android Listview,所以,我有一个简单的应用程序,它可以跟踪我一天摄入的卡路里和脂肪,并为我计算它们的总数。在纵向方向上工作得非常出色,但当我进入横向时,listview被破坏,而且阵列适配器似乎也是空的。我对StackOverflow很感兴趣,并尝试了几个答案,但没有一个有效。我的印象是,当方向改变时,活动在onCreate中被重新创建,listView将从那里重新填充 我尝试过的一些解决方案 1.我自己处理Orentan的变化 通过覆盖根据此SO答案更改的OnConfiguration 2.重写onResum
private ListView foodItemsList;
private DatabaseHelper db;
private ArrayList<FoodItem> allFoods;
private FoodArrayAdapter foodsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
db = new DatabaseHelper(this);
setContentView(R.layout.activity_list_foods);
foodItemsList=(ListView)findViewById(R.id.food_items_list);
allFoods= (ArrayList<FoodItem>) db.getTodaysFoods();
foodsAdapter = new FoodArrayAdapter( this, allFoods);
// set the footer for the list
View footerView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.food_list_footer, null, false);
foodItemsList.addFooterView(footerView);
foodItemsList.setFooterDividersEnabled(true);
//set the listview to use this adapter
foodItemsList.setAdapter(foodsAdapter);
updateTotalDailyCalories();
updateTotalDailyFat();
}
在这里无所适从,这里的任何帮助都能救我的命,但是
真正的误解是数组列表在方向改变后为空
编辑:我的简历错了
此代码修复了该问题
protected void onResume() {
super.onResume();
// check if the listview is null
if (foodItemsList==null){
// get a refference to it and re create it
foodItemsList= (ListView) findViewById(R.id.food_items_list);
// get the data again
allFoods=(ArrayList<FoodItem>)db.getTodaysFoods();
foodsAdapter.setListData(allFoods);
foodsAdapter.notifyDataSetChanged();
}
}
我仍然不明白为什么onResume需要这样做,因为onCreate已经填充了listview,并且在方向更改时被调用。有人能启发我吗