我有一个问题,我有两个活动,活动1和活动2.活动1包含我的SQLite数据库中的内容列表视图,活动2包含一个按钮,按下该按钮会对数据库执行查询。运行时的此查询将更改活动1列表中的信息。
当我按下按钮时,查询工作正常,但活动1中的列表视图不会更新。我知道我必须在列表视图上使用notifyDataSetChanged
才能更新列表信息。
我的问题是如何在活动2中的按钮侦听器的活动1中的列表上调用此方法?
活动1中的Listview和适配器
String[] columns = new String[] {adapter.KEY_CONTENTS_NAME, adapter.KEY_CONTENTS_MEASUREMENT, adapter.KEY_CONTENTS_UNIT};
int[] to = new int[] {R.id.ingredientName, R.id.ingredientMeasurement, R.id.ingredientUnit};
SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(this,R.layout.row2, cursor, columns, to, 0);
ListView ingredientList = (ListView) findViewById(R.id.ingredientList);
ingredientList.setAdapter(myCursorAdapter);
活动2中的按钮
Button cookButton = (Button) findViewById(R.id.cookButton);
cookButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//simple SQL query
//call to activity 2 to update the list
}
});
答案 0 :(得分:-1)
您可以使用startActivityForResult启动活动。以下是文档和示例:http://developer.android.com/training/basics/intents/result.html
在第一项活动中你应该有这样的东西:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SECOND_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// load data from db
// add data to the list view (create a new adapter or clear the items from the old one and add the new items)
// notifyDataSetChanged on adapter
}
}
}
在调用notifyDataSetChanged之前。再次从db加载信息(并检查它是否已更新)并将其添加到列表视图中。然后调用notifyDataSetChanged
答案 1 :(得分:-1)
然后在列表活动中编写此函数:
@onResume
public void onResume(){
super.onResume();
myCursorAdapter.notifyDataSetChanged();
}
当您返回该活动时,将调用此函数,您可以通过调用notifyDataSetChanged
来通知此处的更改。
答案 2 :(得分:-1)
您可以使用startActivityForResult
来实现此目的。
在第一个活动中,如果您想使用startActivityForResult启动此类第二个活动。
Intent myIntent = new Intent(FirstActivity.this, SecondActivity.class);
int FIRST_ACTIVITY_CODE = 100
startActivityForResult(intent, FIRST_ACTIVITY_CODE);
在您的第二次活动中进行点击时,您希望setResult正常,然后退出活动以返回第一个活动。
Button cookButton = (Button) findViewById(R.id.cookButton);
cookButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//simple SQL query
setResult(RESULT_OK);
finish();
}
});
在第一次活动中,您必须覆盖onActivityResult
,然后更新您的列表。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FIRST_ACTIVITY_CODE) {
myCursorAdapter.notifyDataSetChanged();
}
}
因此,您可以使用onActivityResult与活动进行通信。如果您想将从第二个活动中的SQL查询返回的数据传递到第一个活动,可以使用setResult(int resultCode, Intent data)