我还是Android编程的新手,所以这个问题很基本。我在Internet上看到很多代码示例,其中通过诸如ActivityTextView
的onCreate()
方法初始化和访问UI组件。
当我使用Android Studio创建一个新项目--FirstApp
使用默认设置时,一个空白的Activity称为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();
}
}
但是,如果我编译并运行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!”)。-我的简单问题有两个...
onCreate()
Activity方法访问,就像我在Internet上看到的许多示例代码一样,可能是因为尚未创建?onStart()
的活动(其中的方法做工作) -或者我应该做别的东西吗?以前我也使用过onCreateView
Fragment的方法,但是实际上是在onCreate()
我尚未尝试过的Fragment方法中访问Fragment中的UI组件的最佳位置吗?我还注意到,onCreate()
默认的Fragment Android Studio在创建新项目时为您创建的方法没有提供存根...但是onCreateView
确实存在,并且生命周期文档暗示(无论如何,对我而言)这可能是最好的做这样的事情的地方。
任何对此的指导表示赞赏。
fragment transaction commit命令仅将事务置于Que中-将来将在某个时间处理该事务。这就是为什么您不能直接在创建时使用它的原因。
我建议您使用片段来封装其Ui行为-我不会从活动中明确更改片段的Ui元素。
片段内的OnCreateView是初始化片段Ui元素的好地方,因为在创建片段视图时会调用它。
从一开始就使用片段是非常棘手和痛苦的工作,但是根据我的经验,它们确实有助于创建更加模块化的代码。
我建议您在与文档一起开始认真的项目之前,先阅读有关文档中的片段的更多信息。http://developer.android.com/guide/components/fragments.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句