我对 Android 编程还是新手,所以这个问题相当基本。我在 Internet 上看到很多代码示例,其中 UI 组件(如 a )在ActivityTextView
的方法中被初始化和访问。onCreate()
当我使用 Android Studio 创建一个新项目时——FirstApp
使用默认设置,一个名为“MainActivity
自带”的空白 Activity activity_main
,fragment_main
我可以立即将其编译为 APK,将其部署到我的设备上,然后我会得到一个带有标题的屏幕“ FirstApp”和左上角的 TextView,显示“Hello world!”。
如果我给出TextView
一个 IDtextview1
并创建一个成员变量 ,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();
}
}
但是,如果我编译并运行 APK,它会导致“不幸的是,FirstApp 已停止”。信息。
我之前通过将访问 UI 组件的启动代码移动到onStart()
Activity 的方法中来解决这个问题,如下所示:
@Override
protected void onStart()
{
super.onStart();
myTextView = (TextView) findViewById (R.id.textview1);
myTextView.setText ("Hello tablet!");
}
这将导致一个工作 APK 在左上角有一个 TextView 显示“Hello tablet!” - 我的简单问题有两个...
- 如果项目使用 Fragments,那么我是否应该完全期望在 Activity 的方法中无法访问 UI 组件
onCreate()
,正如我在 Internet 上看到的大量示例代码所发生的那样,可能是因为它们尚未创建? - 我可以
onStart()
在 Activity 的方法中访问 UI 组件(这确实有效) - 还是我应该做其他事情?之前我也用过onCreateView
Fragment的方法,但是实际上访问Fragment内部的UI组件最好的地方是用Fragment的onCreate()
方法,我还没试过呢?
我还注意到,onCreate()
当您创建一个新项目时,Android Studio 为您创建的默认 Fragment 方法没有提供存根......但是onCreateView
,生命周期文档暗示(对我来说,无论如何)这可能是最好的做这样的事情的地方。
对此的任何指导表示赞赏。