0
我想另一项活动后更新ListView
finish()
“与结果上课。初始化(正常工作):的Android ArrayAdapter为ListView的方法.notifyDataSetChanged()问题
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
databaseHelper = new DatabaseHelper(this);
objects = databaseHelper.selectObjects();
objectsListView = (ListView) findViewById(R.id.LIST_VIEW_OBJECTS);
objectArrayAdapter = new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_1, objects);
objectsListView.setAdapter(objectArrayAdapter);
}
问题只发生时我试着更新ListView
:
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
if(requestCode == SECOND_ACTIVITY_REQUEST) {
if (resultCode == RESULT_OK) {
objects = databaseHelper.selectObjects();
objectArrayAdapter.notifyDataSetChanged();
}
if (resultCode == RESULT_CANCELED) {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.TOAST_ERROR_RESULT_CANCELED), Toast.LENGTH_LONG).show();
}
}
}
但此代码的工作就好了:
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
if(requestCode == SECOND_ACTIVITY_REQUEST) {
if (resultCode == RESULT_OK) {
objects.add(newObject);
objectArrayAdapter.notifyDataSetChanged();
}
if (resultCode == RESULT_CANCELED) {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.TOAST_ERROR_RESULT_CANCELED), Toast.LENGTH_LONG).show();
}
}
}
此代码也能正常工作:
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
if(requestCode == SECOND_ACTIVITY_REQUEST) {
if (resultCode == RESULT_OK) {
objects = databaseHelper.selectObjects();
objectArrayAdapter = new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_1, objects);
objectsListView.setAdapter(objectArrayAdapter);
}
if (resultCode == RESULT_CANCELED) {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.TOAST_ERROR_RESULT_CANCELED), Toast.LENGTH_LONG).show();
}
}
}
我的问题是:为什么第一种方法不能按预期工作?第二个和第三个似乎是一个工作轮不是吗?
,我真的很抱歉!我试图简化这个问题的代码。 '问卷'='对象'。 '两个例子中的ArrayList'都是相同的(现在更新)。对不起... – 2014-11-04 21:10:44
哦好吧,我不知道,但我认为obectsListView本身需要在调用onNotifyDataSetChanged之前进行操作。例如:objectsListView.clear,.add等 – Lukos 2014-11-04 21:51:16
嗯...我真的不这么认为,因为我之前成功地完成了类似的功能。不同之处在于我将数据添加到数组中,如下所示:'objects.add(newObject);'。这里'objectsListView'也不会被操纵,不是吗? – 2014-11-05 05:31:28