我对onCreate()
,onCreateView()
和getView()
的使用感到困惑。
1。我可以在activity
课程中使用这三个吗?
2。我是否应强制为每个人layouts
强制执行?
答案 0 :(得分:3)
以下是Google Developer网站对这些方法的描述:
<强>的onCreate()强>
活动开始时会调用它。
这是大多数初始化的地方:
<强> OnCreateView()强>
它不是活动的生命周期方法。 它只是一个成员方法,将用于指定的任务,如文档中所述。
标准实施 在充气时使用android.view.LayoutInflater.Factory.onCreateView 使用getSystemService返回的LayoutInflater。这个 实施什么都不做,是为了 pre-android.os.Build.VERSION_CODES.HONEYCOMB apps。较新的应用程序应该 使用onCreateView(View,String,Context,AttributeSet)。依靠来电 在Activity中的onCreateView()是糟糕的编程。
如果您对Fragments
使用此方法,那么
将调用它以使片段实例化其用户界面视图。
<强> getView()强>
此方法仅适用于Fragments
。
它获取片段布局的根视图(由...返回的布局) onCreateView(LayoutInflater,ViewGroup,Bundle)),如果提供的话。
<强>参考文献:强>
https://developer.android.com/reference/android/app/Fragment.html#getView() https://developer.android.com/reference/android/app/Activity.html#onCreate(android.os.Bundle)
答案 1 :(得分:1)
首先参考活动生命周期https://developer.android.com/reference/android/app/Activity.html,
onCreate():
首次创建活动时调用。这是您应该执行所有常规静态设置的地方:创建视图,将数据绑定到列表等。此方法还为您提供包含活动先前冻结状态的Bundle(如果有)。始终紧跟onStart()。
第二,参考片段生命周期https://www.tutorialspoint.com/android/android_fragments.htm
你很困惑因为onCreate()是活动和碎片的权利!! 让我们探索.. onCreateView():
片段中的 onCreate()方法在片段的 onAttachFragment()之后但在片段的 onCreateView()之前调用。 在此方法中,您可以分配变量,获取Intent extras以及不涉及View层次结构的任何其他内容(即非图形初始化)。这是因为当Activity的onCreate()没有完成时可以调用此方法,因此尝试访问View层次结构可能会导致崩溃。
第三,参考适配器,http://www.edureka.co/blog/what-are-adapters-in-android/
getView():
1 :LayoutInflater采用布局XML文件并从其内容创建不同的View对象。
2 :构建适配器以重用视图,当滚动视图使其不再可见时,它可用于出现的新视图之一。这个重用的View是convertView。如果这是null,则意味着没有回收的View,我们必须创建一个新的View,否则我们应该使用它来避免创建新的。
3 :提供了父级,因此您可以将视图扩展为适当的布局参数。
所有这些可以用于有效地创建将出现在列表中的视图(或带有适配器的其他视图):
public View getView (int position, View convertView, ViewGroup parent){
if( convertView == null ){
//We must create a View:
convertView = inflater.inflate(R.layout.my_list_item, parent, false);
}
//Here we can do changes to the convertView, such as set a text on a TextView
//or an image on an ImageView.
return convertView;
}
您不能在活动中使用 onCreateView()和 getView()(如果您愿意,可以使用自定义适配器,您可以在活动中创建自定义适配器,在该课程中,您可以使用 getView())。