Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Listview在安装更改时被销毁_Java_Android_Listview_Android Listview - Fatal编程技术网

Java Listview在安装更改时被销毁

Java Listview在安装更改时被销毁,java,android,listview,android-listview,Java,Android,Listview,Android Listview,所以,我有一个简单的应用程序,它可以跟踪我一天摄入的卡路里和脂肪,并为我计算它们的总数。在纵向方向上工作得非常出色,但当我进入横向时,listview被破坏,而且阵列适配器似乎也是空的。我对StackOverflow很感兴趣,并尝试了几个答案,但没有一个有效。我的印象是,当方向改变时,活动在onCreate中被重新创建,listView将从那里重新填充 我尝试过的一些解决方案 1.我自己处理Orentan的变化 通过覆盖根据此SO答案更改的OnConfiguration 2.重写onResum

所以,我有一个简单的应用程序,它可以跟踪我一天摄入的卡路里和脂肪,并为我计算它们的总数。在纵向方向上工作得非常出色,但当我进入横向时,listview被破坏,而且阵列适配器似乎也是空的。我对StackOverflow很感兴趣,并尝试了几个答案,但没有一个有效。我的印象是,当方向改变时,活动在onCreate中被重新创建,listView将从那里重新填充

我尝试过的一些解决方案 1.我自己处理Orentan的变化 通过覆盖根据此SO答案更改的OnConfiguration

2.重写onResume以重新创建listview 关于这个解决方案,我不了解的是,据我所知,onResume在onCreate之后被调用,所以listview已经被重新创建了

3.引用此simalar应用程序的开放源代码使用上述onResume方法 我认为oncreate中有一些错误,下面是代码

  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,并且在方向更改时被调用。有人能启发我吗