为什么我的活动类的实例变量值没有被保留在onResume()上?

时间:2014-08-18 01:52:52

标签: android

  1. 我在活动B中有一个列表视图,通过适配器填充列表列表。这个列表列表是从活动A传递的包中检索的,如下所示:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_results);
    lvLineups = (ListView)findViewById(R.id.lvResults); 
    }
    
    @Override
    protected void onResume() {
    super.onResume();
    lineups = (ArrayList<ArrayList<Band>>) getIntent().getSerializableExtra("results");
    ResultsAdapter resultsAdapter = new ResultsAdapter(this, lineups);
    lvLineups.setAdapter(resultsAdapter);
    }
    
  2. 我从此活动中启动了一个隐含的视频意图,因此活动B在后台进行(暂停,调用onPause),视频就在前面。

  3. 我点击视频,杀死该活动。

  4. 活动B的简历(onResume被调用),我看到列表(阵容)列表现在是空的。 根据活动生命周期,此活动正在恢复,所以为什么我仍然没有在步骤1中看到列表列表,以及如何在隐含视频意图之后保留它。

  5. 注意:这看起来像一个垂直列表视图,其中每一行都是一个水平滚动列表。除了添加视频意图时,我才能使用此布局。播放视频并向下滚动会导致indexoutofbounds异常,因为从活动A收到的阵容现已消失。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_results);
    
        lvLineups = (ListView)findViewById(R.id.lvResults);
        lineups = (ArrayList<ArrayList<Band>>) getIntent().getSerializableExtra("results");
        ResultsAdapter resultsAdapter = new ResultsAdapter(this, lineups);
        lvLineups.setAdapter(resultsAdapter);
    }
    

    媒体播放器播放视频并关闭后,返回活动B,我在调试器中看到阵容为空。这很奇怪,因为在调用onCreate之前它是一个未初始化的实例变量。我预计它会在活动B启动视频意图后保持不变,或者至少为null。

1 个答案:

答案 0 :(得分:0)

好的,让我们一起完成活动周期。

最初,您从活动A =&gt;启动了活动B.所以lineups是从活动A的束中获取的。所以你得到了这个值。

然后你启动了Video这是另一个意图。然后你要回去了。此时再次调用onResume()(其中包没有lineups的值)。您应该在lineups而不是onCreate()中获得onResume(),暂停后会调用{{1}}。