我有一个活动堆栈,如:
activity A make something
activity A call Activity B (without finish();)
activity B make something
activity B call activity C
activity B finish();
activity C make something
activity C finish();
我想更新Acivity A的视图,因为活动C所做的修改已经更新了数据库,也许我在活动A中列出了不同的东西。
如果我的主要活动是这样的:
public class MainActivity extends ListActivity {
private pollDataSource datasource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
datasource = new pollDataSource(this);
datasource.open();
Cursor values = datasource.getAllCategorie();
String[] categorieColumns =
{
MySQLiteHelper.COLUMN_NOME // Contract class constant containing the word column name
};
int[] mWordListItems = { R.id.categoria_label };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
getApplicationContext(), // The application's Context object
R.layout.single_list_item, // A layout in XML for one row in the ListView
values, // The result from the query
categorieColumns, // A string array of column names in the cursor
mWordListItems, // An integer array of view IDs in the row layout
0); // Flags (usually none are needed)
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
TextView textView = (TextView) v.findViewById(R.id.categoria_label);
String text = textView.getText().toString();
Intent myIntent = new Intent(MainActivity.this, domandeDiCategoria.class);
myIntent.putExtra("categoriaName", text);
myIntent.putExtra("categoriaId", id);
datasource.close();
MainActivity.this.startActivity(myIntent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
我必须写onResume()吗?并使其类似于onCreate?或者我可以使用相同的光标,相同的适配器等来“更新”视图?什么更好?
答案 0 :(得分:2)
1)在A活动中定义
public static int UPDATE_A_ACTIVITY = 1;
2)startActivityForResult(intentB, A.UPDATE_A_ACTIVITY); // start B from A
3)startActivityForResult(intentC, A.UPDATE_A_ACTIVITY); // start C from B
4)当C活动一切正常时完成C活动并通知A活动,他应该更新一些东西
C活动中的:
finish();
setResult(RESULT_OK);
5)在调用setResult(RESULT_OK);
之后将在A中调用next方法(在A活动中写这个):
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case UPDATE_A_ACTIVITY:
if (resultCode == RESULT_OK) {
// update what u want
}
break;
}
}
答案 1 :(得分:1)
在活动C 中有一个标记。
boolean update = false;
如果活动C 更改了数据库中的某些内容,请将此设为真。
在活动A
中onResume(){
if(update){
//repopulate the list with new data
}
}