1

我正在制作一个带有闪屏动画的应用程序。我已经为用户提供了取消动画的选项。

主屏幕 (Home) 有一个 TextView (tv) 。我在 onCreate() 期间设置了文本,并在 onResume() 期间再次设置了文本。

运行动画时,流程为:闪屏 -> 主屏幕 -> 其他活动。tv 的文本已设置,然后返回主屏幕“重新加载”并设置不同的文本。

当动画被取消时,它会从主屏幕开始:主屏幕 -> 其他活动。

问题:当动画被取消时,主屏幕在 onCreate() 期间将文本设置在 tv2 中,然后在 onResume() 中再次设置它,即使我添加了一个“if”子句来防止这种情况发生。

这是代码:

public class Home extends Activity {
    public static boolean reload = true;
    EditText tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    tv= (EditText) findViewById(R.id.textViewFact);
    tv.setText(updateText()); 
    MORE STUFF ....
}

如果用户选择取消动画,则从不同的活动中将“重新加载”设置为 false。

现在对于onResume:

public void onResume(){
    super.onResume();
    Log.i("test", "home activity before if: " + Home.reload);

    if(!reload){
        Log.i("test", "home activity inside if: " + Home.reload);

        return;
    }
    else{
        Log.i("test", "home activity inside else: " + Home.reload);

        tv.setText(updateText()); 
    }
}

如您所见,updateText() 在 onCreate() 和 onResume() 中运行,但如果 reload 为假(如您在以下 logcat 输出中看到的那样),它不应该运行 updateText( ) 再次。

01-30 08:44:50.140: I/test(551): home activity before if: false
01-30 08:44:50.140: I/test(551): home activity inside if: false
01-30 08:44:51.170: I/test(551): home activity before if: false
01-30 08:44:51.170: I/test(551): home activity inside if: false

我不知道为什么它会进入 onResume() TWICE(它是,通过日志输出),以及它是如何运行 updateText() 函数的,当它只在 ELSE 子句中时,它不是t 达到,根据日志输出。

4

2 回答 2

1

事实证明,updateText() 再次被调用,不是从 onResume() 而是从 onCreate(),因为调用主屏幕的活动没有正确完成,实际上调用主活动启动两次。

谢谢大家的帮助。

于 2013-01-30T09:02:22.030 回答
0

我建议您在首选项中放置和更新您的重新加载标志,并在使用它之前从首选项中获取...

于 2013-01-30T07:40:09.740 回答