在Activity/Fragment构造函数中定义布局文件Id
2020-06-19 本文已影响0人
葛糖糖
随着很多项目都迁移到了AndroidX,AndroidX为我们带来了一些库统一的时候也带来一下优化的tips,比如在Activity/Fragment构造函数中定义layout Id.
Activity/Fragment引入布局文件
Acticity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
在activity中我们一般都是继承AppCompatActivity(),复写onCreate方法,然后在里面通过setContentView来设置我们的布局文件Id.
Fragment
class MainFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.main_fragment, container, false)
}
}
在Fragment中我们一般都是继承Fragment(),复写onCreateView方法,然后inflate布局文件Id生成一个View用来返回.
AndroidX引入布局文件
首先在build.gradle引入相关库
implementation 'androidx.appcompat:appcompat:1.1.0'
Acticity
class MainActivity : AppCompatActivity(R.layout.activity_main)
Fragment
class MainFragment : Fragment(R.layout.main_fragment)
瞄一眼源码
@ContentView
public ComponentActivity(@LayoutRes int contentLayoutId) {
this();
mContentLayoutId = contentLayoutId;
}
/**
* {@inheritDoc}
*
* If your ComponentActivity is annotated with {@link ContentView}, this will
* call {@link #setContentView(int)} for you.
*/
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSavedStateRegistryController.performRestore(savedInstanceState);
ReportFragment.injectIfNeededIn(this);
if (mContentLayoutId != 0) {
setContentView(mContentLayoutId);
}
}
通过源码可以看出只不过是ComponentActivity帮我们把这一步做了.
算是积累的小tips.