我有一个带有ListView(ItemsActivity)的Activity,其内容来自JSON API。当我按下ListView中的一个项目时,它会加载另一个带有详细信息的活动(DetailActivity)。问题是,当我按下后退按钮时,ItemsActivity会重新加载ListView。
我不知道在哪里可以找到更多相关信息。我来自iOS,每次都不会重新加载上一个屏幕。
我想在活动之间保留ListView数据。我测试从onResume()调用loadListItems()方法但结果相同。
这是我的代码的简要示例。任何帮助和建议都将非常感激。
/* ItemsActivity.java */
public class ItemsActivity extends AppCompatActivity {
private ListView listItemView;
private Movie[] movies;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler);
listItemView = (ListView) findViewById(R.id.listItemView);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
loadListItems();
}
private void loadListItems(){
// Http call
...
// Iterate JSON and saving to movies array
...
progressBar.setVisibility(INVISIBLE);
ListAdapter adapter = new ListAdapter(ItemsActivity.this, movies);
listItemView.setAdapter(adapter);
}
/* Adapter Class */
@Override
public void onClick(View v) {
Intent i = new Intent(this, DetailActivity.class);
i.putExtra("item_id", 1);
startActivity(i);
}
}
我刚刚测试了一个包含2个Activity,ActivityOne和ActivityTwo的新项目。 ActivityOne有一个按钮,当按下它的负载ActivityTwo时,当我按下后退按钮时,在ActivityOne中再次调用onCreate()方法。
答案 0 :(得分:0)
你提到过“我测试过从onResume()调用loadListItems()方法但结果相同。”这个onResume()代码是罪魁祸首。
只要您的活动再次获得焦点,就会调用OnResume()。如果您在onResume()中调用loadListItems(),则每次从第二个活动返回此活动时都会调用它。 http://developer.android.com/reference/android/app/Activity.html#onResume()
答案 1 :(得分:0)
解决方案是使用StartActivityForResult而不是StartActivity。然后在第二个活动中,覆盖onBackPressed方法并在此方法中完成()第二个活动。覆盖第一个活动中的onActivityResult方法,将调用此活动,而不是onCreate方法,并且不会重新加载ListView。
答案 2 :(得分:0)
问题出现在我从Action Bar按下后退按钮并使用onOptionsItemSelected方法修复它时。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}