视频: 【Android 开发视频教程系列-专题1】美女小小 讲解 Android Studio 使用说明 之 Android Studio 项目操作 2024
这里使用的Android应用示例中的用户界面有三个面板 - 项目列表,详细信息面板描述列表中选择的项目,还有一个详细的更深入的面板。在小型智能手机屏幕上,每个面板可能是一个单独的活动。但横向模式下的平板电脑屏幕有多个面板的空间。
下面的图片显示了这个应用程序与三个面板中的两个。左侧的面板显示Android SDK组件列表。右侧的面板显示左侧列表中所选组件的描述。 (这个描述实际上是组件的SDK文档的前几个句子。)这个细节在右边的模式是许多用户界面的一部分。
<! --1 - > 附加到一个活动的两个片段。要创建显示,您需要创建一个活动。活动有两个片段 - 一个片段在左边,另一个在右边。左侧面板在应用程序运行过程中显示相同的片段,因此您可以在活动的布局文件中声明该片段。右侧面板一次显示一个片段,但片段在应用运行过程中发生变化。所以你在右面板中声明一个框架布局。
<!在上面的代码中,android:layout_ whatever属性把屏幕分成两半 - 一半是片段元素,另一半是FrameLayout元素。具有这些属性的策略是首先为每个元素分配最小的零像素。当然,零像素意味着根本没有宽度(这是不可见的)。要使布局的两半不可见,请将相等的非零layout_weight值分配给两半。在非零权重值的情况下,每一半都会扩展以填充布局中的可用空间。
如果您想知道,Android的内置detailsElementBackground为右半部分(显示用户所选项目的详细信息)提供统一的外观。
该应用程序的主要活动代码令人难以置信。
package com。 allmycode。 FRAG;导入android。应用程序。活动;导入android。操作系统。束;公共类AllPurposeActivity扩展活动{@Override保护无效的onCreate(Bundle savedInstanceState){超级。的onCreate(savedInstanceState);的setContentView(R。布局。 main);}}
下面的代码包含ComponentNamesFragment类。根据第一个示例中的布局,Android在设备屏幕的左侧植入了一个ComponentNamesFragment。
package com。 allmycode。 FRAG;导入android。应用程序。 FragmentManager;导入android。应用程序。 FragmentTransaction;导入android。应用程序。 ListFragment;导入android。操作系统。束;导入android。视图。视图;导入android。小部件。 ArrayAdapter;导入android。小部件。列表显示;公共类ComponentNamesFragment扩展ListFragment {最终静态字符串[]组件= {“活动”,“服务”,“BroadcastReceiver”,“ContentProvider”}; @Override public void onActivityCreated(Bundled savedInstanceState){super。 onActivityCreated(savedInstanceState); setListAdapter(new ArrayAdapter(getActivity(),android.R. layout。simple_list_item_1,COMPONENTS));} @Override public void onListItemClick(ListView l,View v,int index,long id){//创建带索引的片段DocsFragment docsFragment =新的DocsFragment();捆绑args =帮手。 getBundleWithIndex(索引); docsFragment。 setArguments(参数); //清除后退堆栈FragmentManager fragmentManager = getFragmentManager(); int backStackEntryCount = fragmentManager。 getBackStackEntryCount(); for(int i = 0; i 在上面的例子中,ArrayAdapter的构造函数有三个参数。 第一个参数是上下文 - 这个令人讨厌的参数迫使你把构造函数放在onActivityCreated方法中。 第二个参数是simple_list_item_1 - 一个标准的Android布局。 simple_list_item_1布局创建您在图像左侧看到的外观。 Android有很多这些标准的布局。有关可用布局的综述,请访问Android的开发者网站。 第三个参数是将出现在列表中的项目的集合。 在这个例子中,这些项目来自在同一个例子中声明的COMPONENTS数组。 就像一个ListActivity,一个ListFragment有一个onListItemClick方法。您可以通过使用DocsFragment,FragmentTransaction和FragmentManager来响应点击: DocsFragment代表上图中的右侧。片段事务是你用碎片做的一堆事情。例如,设置替换一个片段是一个事务。 片段管理器的名字就是这么做的。它管理碎片的到达和离开。
上面代码中的类扩展了Android的ListFragment类。 ListFragment是一个显示列表的片段。在片段生命周期的早期,上面例子中的代码为片段设置了一个列表适配器(更具体地说是一个ArrayAdapter)。那么“早点”有多早? ArrayAdapter构造函数的第一个参数是一个上下文。可是等等!与活动不同,片段不是一个上下文。所以你不能使用关键字this作为ArrayAdapter构造函数的第一个参数。幸运的是,一个片段有一个getActivity方法。对getActivity的调用会抓取片段附加到的活动。所以,对于ArrayAdapter构造函数的第一个参数,可以调用getActivity。当然,除非片段附加到现有活动,否则无法调用getActivity。这就是为什么片段的onActivityCreated方法在上面覆盖。在附加片段并调用活动的onCreate方法之后,Android调用onActivityCreated。所以一切都按计划进行。 android。应用程序。 Activity类的曾祖父类是android。内容。语境。但是android。应用程序。片段类的父类是普通的老Java。郎。目的。因此,在一个活动的代码中,这个关键字是指一个上下文。但是在一个片段的代码中,这个关键字并不是指上下文。