我还是Android编程的新手,所以这个问题很基础.我在Internet上看到许多代码示例,其中UI组件(如a TextView)正在初始化并在onCreate()Activity 的方法中访问.
当我使用Android Studio来创建一个新的项目- FirstApp-使用默认设置,一个空白的活动叫做MainActivity带来与它一起activity_main和fragment_main,我可以马上编译此为APK,部署我的设备上,我也得到一个屏幕,标题" FirstApp"和左上角的TextView显示"Hello world!".
如果我给出TextView一个ID textview1,并创建一个成员变量,TextView myTextView;那么我可以onCreate()在Activity 的方法中引用它,就像这样(当然没有编译器错误):
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
myTextView = (TextView) findViewById (R.id.textview1);
myTextView.setText ("Hello tablet!");
if (savedInstanceState == null)
{
getSupportFragmentManager().beginTransaction().add (R.id.container,new PlaceholderFragment()).commit();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我编译并运行APK,则会导致"不幸的是,FirstApp已停止".信息.
我以前通过将访问UI组件的启动代码移动到onStart()Activity 的方法中解决了这个问题,如下所示:
@Override
protected void onStart()
{
super.onStart();
myTextView = (TextView) findViewById (R.id.textview1);
myTextView.setText ("Hello tablet!");
}
Run Code Online (Sandbox Code Playgroud)
这将导致一个工作的APK在左上角显示一个单独的TextView显示"Hello平板电脑!" - …