如果我们有两个活动:
- 文件列表和上次修改时间
- 文件编辑活动
用户从列表中选择一个文件,然后转到文件编辑活动。完成编辑后,用户按下后退按钮以返回文件列表。
该列表未重新加载,因此对于刚编辑的文件修改时间,显示的值不正确。
按下后退按钮后导致文件列表刷新的正确方法是什么?
本示例假定不使用数据库,仅使用ArrayAdapter。
Answers:
一种选择是使用第一个活动的onResume。
@Override
public void onResume()
{ // After a pause OR at startup
super.onResume();
//Refresh your stuff here
}
或者您可以为结果启动活动:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);
如果要发送回数据,请在secondActivity中:
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();
如果您不想返回数据:
Intent returnIntent = new Intent();
setResult(RESULT_CANCELED, returnIntent);
finish();
现在在您的FirstActivity类中为onActivityResult()方法编写以下代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
//Update List
}
if (resultCode == RESULT_CANCELED) {
//Do nothing?
}
}
}//onActivityResult
onResume我,为什么?(我想onRestart和onPause过,但没有人不叫)
我认为onRestart()对此更好。
@Override
public void onRestart() {
super.onRestart();
//When BACK BUTTON is pressed, the activity on the stack is restarted
//Do what you want on the refresh procedure here
}
您可以编写onRestart()中的Activity重新启动(从事件“按下后退按钮”再次调用)时要执行的操作。
例如,如果要执行与onCreate()中相同的操作,请将代码粘贴到onRestart()中(例如,使用更新后的值重建UI)。
在主要方面:
@Override
public void onRestart()
{
super.onRestart();
finish();
startActivity(getIntent());
}
我建议覆盖onResume()活动编号1中的方法,并在其中包含刷新数组适配器的代码,这是通过使用[yourListViewAdapater].notifyDataSetChanged();
如果您在刷新列表时遇到问题,请阅读以下内容:Android列表视图刷新
如果要刷新以前的活动,此解决方案应该可以工作:
在上一个要刷新的活动中:
@Override
public void onRestart()
{
super.onRestart();
// do some stuff here
}
private Cursor getAllFavorites() {
return mDb.query(DocsDsctnContract.DocsDsctnEntry.Description_Table_Name,
null,
null,
null,
null,
null,
DocsDsctnContract.DocsDsctnEntry.COLUMN_Timest);
}
@Override
public void onResume()
{ // After a pause OR at startup
super.onResume();
mAdapter.swapCursor(getAllFavorites());
mAdapter.notifyDataSetChanged();
}
public void swapCursor(Cursor newCursor){
if (mCursor!=null) mCursor.close();
mCursor = newCursor;
if (newCursor != null){
mAdapter.notifyDataSetChanged();
}
}
我只是具有“收藏夹”类别,因此当我从“收藏夹”中单击该项目时,会出现此类信息,如果我与它不同,则应从“收藏夹”中删除该项目:为此,我刷新数据库并将其设置为adapter(for recyclerview)[我希望您会理解我的问题和解决方案]
@Override
protected void onRestart() {
super.onRestart();
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
}
在以前的活动中,请使用此代码。当您按下返回按钮返回时,这将进行平稳的过渡并重新加载活动。
最好的解决方法是使用
Intent i = new Intent(this.myActivity, SecondActivity.class);
startActivityForResult(i, 1);
试试这个
public void refreshActivity() {
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
}
或片段中
public void refreshActivity() {
Intent i = new Intent(getActivity(), MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
}
并将此方法添加到您的onBackPressed()
@Override
public void onBackPressed() {
refreshActivity();
super.onBackPressed();
}
}
而已...
@Override
public void onBackPressed() {
Intent intent = new Intent(this,DesiredActivity.class);
startActivity(intent);
super.onBackPressed();
}