Listview在方向更改时被破坏

时间:2014-06-22 18:20:48

标签: java android listview android-listview

所以,我有一个简单的应用程序,它可以追踪我一天所吸收的卡路里和脂肪,并为我总计。以纵向方式工作,但当我进入横向时,列表视图被破坏,似乎数组适配器也是空的。我对StackOverflow充满了热情并尝试了几个答案,但都没有。我的印象是,当方向改变时,活动在onCreate()中重新创建,listView将从那里重新填充

我尝试过的一些解决方案

1。处理orentatin自我改变

根据此SO答案覆盖onConfigurationChanged() How to handle an AsyncTask during Screen Rotation?

2。覆盖onResume()以重新创建listview

我对这个解决方案的理解是因为我的理解onResume无论如何都是在onCreate之后调用的,所以listview wold已经重新创建了

3。引用了simalar app的开源代码(使用上面的onResume方法)

https://github.com/Asdamp/Xday/blob/master/src/com/asdamp/x_day/MainActivity.java

我认为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();


}

在这里不知所措,这里的任何帮助都会拯救我的但是 真正的错误是方向改变后数组列表为空.........

编辑:我的onResume错了

此代码修复了问题

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,并且无论如何都被调用了方向更改。有人可以开导我吗?

0 个答案:

没有答案