我有一项允许用户开始第二项活动的活动。第二个活动有一个项目列表,我将其添加到数组列表中。当我返回上一个活动时,我想显示数组列表的大小。
但是我遇到了onResume()的问题。它是在创建我的第一个活动时调用的,因此在首次启动时数组列表不存在时会生成错误!
的onResume():
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
getIntentData();
calcSubTotal(orderData);
}
getIntentData():
public void getIntentData(){
b = new Bundle();
b = getIntent().getExtras();
orderData = b.getParcelable("order");
Toast.makeText(this.getApplicationContext(), orderData.size(), Toast.LENGTH_LONG).show();
}
第二项活动的onCreate():
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_starters);
createTestData();
b = new Bundle();
orderData = new MenuItemList();
adapter = new MenuItemArrayAdapter(this, starters);
this.setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Toast.makeText(this.getApplicationContext(), l.getItemAtPosition(position).toString() + " clicked", Toast.LENGTH_LONG).show();
//add clicked item to orderData....
MenuItem m = (MenuItem)l.getItemAtPosition(position);
//create new item
orderData.add(m);
}
知道如何控制它吗?
ERROR:
java.lang.RuntimeException:无法恢复活动{com.example.waitronproto3 / com.example.waitronproto3.SectionsActivity}:java.lang.NullPointerException
答案 0 :(得分:2)
我想您可能想要查看startActivityForResult
,而不是在您开始第二个活动时。它允许您的第二个活动将结果返回到您的第一个活动。您可以在Activity文档中阅读,特别是"开始活动和获得结果"文件的一部分。
编辑:根据你的代码的外观 - 你所做的就是从第二个活动中存储一个包并将其发送回第一个活动。因此,您在第一项活动中永远不会获得正确的Bundle
数据。如建议的那样,请查看startActivityForResult
以启动您的第二项活动。这样您就可以轻松地将数据返回到第一个活动中。
答案 1 :(得分:0)
但是我遇到了onResume()的问题。它是在创建我的第一个活动时调用的,因此在首次启动时数组列表不存在时会生成错误!
我建议更改getIntentData()
以检查是否首先存在相应的数据:
public void getIntentData(){
Intent intent = getIntent();
if(intent != null && intent.hasExtra("order")) {
orderData = b.getParcelable("order");
Toast.makeText(this.getApplicationContext(), orderData.size(), Toast.LENGTH_LONG).show();
calculateSubTotal(order);
}
}
并更新onResume()
:
@Override
protected void onResume() {
super.onResume();
getIntentData();
}
(虽然您现在可以简单地将getIntentData()
放入onResume()
。)
答案 2 :(得分:0)
onResume()
将根据Android Lifecycle在onCreate()
之后调用`if(intentData != null)
//do something`
,因此在尝试使用之前,您需要检查数据是否为空。
{{1}}