Android爬坑记

在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.

上一篇 下一篇

猜你喜欢

热点阅读