每次活动重新加载

时间:2015-10-21 03:01:11

标签: android android-intent android-activity android-listview activity-lifecycle

我有一个带有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()方法。

3 个答案:

答案 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);
}