gpt4 book ai didi

android - setContentView 和 LayoutInflater 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 22:22:03 26 4
gpt4 key购买 nike

我正在创建一个包含多个 fragment 的选项卡列表。我注意到,在主要 Activity 中,我使用 setContentView 来获取布局 xml,并使用 findViewById 来获取相应的 UI 元素配置。

setContentView(R.layout.fragment_tabs);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabManager = new TabManager(this, mTabHost, android.R.id.tabcontent);

但是,在不同的 fragment 类中,我必须改用充气器。

View v = inflater.inflate(R.layout.webview, container, false);
WebView myBrowser=(WebView)v.findViewById(R.id.mybrowser);

而且这两个函数都是用来获取布局xml来创建对象的,为什么会有区别呢?第一个是在 onCreate 期间使用,第二个是在 onCreateView 期间使用吗?在什么情况下我应该选择其中之一?

最佳答案

setContentView 只是一个 Activity 方法。每个 Activity 都提供一个 FrameLayout,id 为 "@+id/content"(即内容 View )。您在 setContentView 中指定的任何 View 都将是该 Activity 的 View 。请注意,您还可以将 View 的实例传递给此方法,例如setContentView(new WebView(this)); 您正在使用的方法版本将在幕后为您放大 View 。

另一方面, fragment 有一个名为 onCreateView 的生命周期方法,它返回一个 View (如果有的话)。最常见的方法是在 XML 中扩充 View 并在此方法中返回它。在这种情况下,您需要自己充气。 fragment 没有 setContentView 方法

Activity 和 View 都有一个名为 findViewById() 的方法。 Activity 版本将在其内容 View 中搜索具有给定 ID 的 View (因此,在内部,它将调用 contentView.findViewById())。这意味着 contentView 需要在它变得可用之前进行设置。与 setContentView 一样, fragment 没有 findViewById 的方法(这是有道理的,因为没有内容 View )。只需使用 getView().findViewById() 代替相同的行为。

LayoutInflater.inflate 只是膨胀并返回一个 View (你可以在任何地方使用它)。您仍然需要将该 View 设置为 Activity 中的内容 View

关于android - setContentView 和 LayoutInflater 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17808177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com