DO NOT MERGE. Integrate API demo work from master.
New API demo for the support library FragmentPager class. Add API demo for new -wNNNdp and -hNNNdp configs. Add new API demo for implementing a custom loader. Also turn the fragment cursor list demo into a loader cursor demo.
This commit is contained in:
@@ -312,15 +312,6 @@
|
|||||||
<activity android:name=".app.FragmentLayout$DetailsActivity"
|
<activity android:name=".app.FragmentLayout$DetailsActivity"
|
||||||
android:enabled="@bool/atLeastHoneycomb" />
|
android:enabled="@bool/atLeastHoneycomb" />
|
||||||
|
|
||||||
<activity android:name=".app.FragmentListCursorLoader"
|
|
||||||
android:label="@string/fragment_list_cursor_loader"
|
|
||||||
android:enabled="@bool/atLeastHoneycomb">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity android:name=".app.FragmentListArray"
|
<activity android:name=".app.FragmentListArray"
|
||||||
android:label="@string/fragment_list_array"
|
android:label="@string/fragment_list_array"
|
||||||
android:enabled="@bool/atLeastHoneycomb">
|
android:enabled="@bool/atLeastHoneycomb">
|
||||||
@@ -425,14 +416,6 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity android:name=".support.app.FragmentListCursorLoaderSupport"
|
|
||||||
android:label="@string/fragment_list_cursor_loader_support">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.SAMPLE_CODE" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity android:name=".support.app.FragmentListArraySupport"
|
<activity android:name=".support.app.FragmentListArraySupport"
|
||||||
android:label="@string/fragment_list_array_support">
|
android:label="@string/fragment_list_array_support">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
@@ -475,8 +458,34 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
<activity android:name=".support.app.FragmentPagerSupport"
|
||||||
|
android:label="@string/fragment_pager_support">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.SAMPLE_CODE" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
|
||||||
<!-- Loader Samples -->
|
<!-- Loader Samples -->
|
||||||
|
|
||||||
|
<activity android:name=".app.LoaderCursor"
|
||||||
|
android:label="@string/loader_cursor"
|
||||||
|
android:enabled="@bool/atLeastHoneycomb">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.SAMPLE_CODE" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
|
||||||
|
<activity android:name=".app.LoaderCustom"
|
||||||
|
android:label="@string/loader_custom"
|
||||||
|
android:enabled="@bool/atLeastHoneycomb">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.SAMPLE_CODE" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
|
||||||
<!-- BEGIN_INCLUDE(loader_throttle) -->
|
<!-- BEGIN_INCLUDE(loader_throttle) -->
|
||||||
<activity android:name=".app.LoaderThrottle"
|
<activity android:name=".app.LoaderThrottle"
|
||||||
android:label="@string/loader_throttle"
|
android:label="@string/loader_throttle"
|
||||||
@@ -493,6 +502,14 @@
|
|||||||
|
|
||||||
<!-- Fragment Support Samples -->
|
<!-- Fragment Support Samples -->
|
||||||
|
|
||||||
|
<activity android:name=".support.app.LoaderCursorSupport"
|
||||||
|
android:label="@string/loader_cursor_support">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.SAMPLE_CODE" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
|
||||||
<activity android:name=".support.app.LoaderThrottleSupport"
|
<activity android:name=".support.app.LoaderThrottleSupport"
|
||||||
android:label="@string/loader_throttle_support">
|
android:label="@string/loader_throttle_support">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
@@ -1010,6 +1027,16 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
<activity android:name=".content.ResourcesWidthAndHeight"
|
||||||
|
android:label="@string/activity_resources_width_and_height"
|
||||||
|
android:enabled="@bool/atLeastIceCreamSandwich">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.SAMPLE_CODE" />
|
||||||
|
<category android:name="android.intent.category.EMBED" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
|
||||||
<activity android:name=".content.ReadAsset" android:label="@string/activity_read_asset">
|
<activity android:name=".content.ReadAsset" android:label="@string/activity_read_asset">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|||||||
43
samples/ApiDemos/res/layout-h420dp/resources_height.xml
Normal file
43
samples/ApiDemos/res/layout-h420dp/resources_height.xml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Part of resources_width_and_height that varies based on height. -->
|
||||||
|
|
||||||
|
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#8000ff00">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#80ff0000">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#8000ff00">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#80ff0000">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</merge>
|
||||||
63
samples/ApiDemos/res/layout-h670dp/resources_height.xml
Normal file
63
samples/ApiDemos/res/layout-h670dp/resources_height.xml
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Part of resources_width_and_height that varies based on height. -->
|
||||||
|
|
||||||
|
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#8000ff00">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#80ff0000">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#8000ff00">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#80ff0000">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#8000ff00">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#80ff0000">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#8000ff00">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#80ff0000">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</merge>
|
||||||
43
samples/ApiDemos/res/layout-w420dp/resources_width.xml
Normal file
43
samples/ApiDemos/res/layout-w420dp/resources_width.xml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Part of resources_width_and_height that varies based on width. -->
|
||||||
|
|
||||||
|
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w420dp Width\n#1">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w420dp Width\n#2">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w420dp Width\n#3">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w420dp Width\n#4">
|
||||||
|
</TextView>
|
||||||
|
</LinearLayout>
|
||||||
|
</merge>
|
||||||
63
samples/ApiDemos/res/layout-w720dp/resources_width.xml
Normal file
63
samples/ApiDemos/res/layout-w720dp/resources_width.xml
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Part of resources_width_and_height that varies based on width. -->
|
||||||
|
|
||||||
|
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w720dp Width\n#1">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w720dp Width\n#2">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w720dp Width\n#3">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w720dp Width\n#4">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w720dp Width\n#5">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w720dp Width\n#6">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w720dp Width\n#7">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="w720dp Width\n#8">
|
||||||
|
</TextView>
|
||||||
|
</LinearLayout>
|
||||||
|
</merge>
|
||||||
37
samples/ApiDemos/res/layout/fragment_pager.xml
Normal file
37
samples/ApiDemos/res/layout/fragment_pager.xml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2010 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Top-level content view for the simple fragment sample. -->
|
||||||
|
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical" android:padding="4dip"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:layout_width="match_parent" android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<android.support.v4.app.FragmentPager
|
||||||
|
android:id="@+id/pager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0px"
|
||||||
|
android:layout_weight="1">
|
||||||
|
</android.support.v4.app.FragmentPager>
|
||||||
|
|
||||||
|
<Button android:id="@+id/new_fragment"
|
||||||
|
android:layout_width="wrap_content" android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:text="@string/new_fragment">
|
||||||
|
<requestFocus />
|
||||||
|
</Button>
|
||||||
|
</LinearLayout>
|
||||||
52
samples/ApiDemos/res/layout/fragment_pager_list.xml
Normal file
52
samples/ApiDemos/res/layout/fragment_pager_list.xml
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@android:drawable/gallery_thumb">
|
||||||
|
|
||||||
|
<TextView android:id="@+id/text"
|
||||||
|
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical|center_horizontal"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:text="@string/hello_world"/>
|
||||||
|
|
||||||
|
<!-- The frame layout is here since we will be showing either
|
||||||
|
the empty view or the list view. -->
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dip"
|
||||||
|
android:layout_weight="1" >
|
||||||
|
<!-- Here is the list. Since we are using a ListActivity, we
|
||||||
|
have to call it "@android:id/list" so ListActivity will
|
||||||
|
find it -->
|
||||||
|
<ListView android:id="@android:id/list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:drawSelectorOnTop="false"/>
|
||||||
|
|
||||||
|
<!-- Here is the view to show if the list is emtpy -->
|
||||||
|
<TextView android:id="@android:id/empty"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:text="No items."/>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
33
samples/ApiDemos/res/layout/resources_height.xml
Normal file
33
samples/ApiDemos/res/layout/resources_height.xml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Part of resources_width_and_height that varies based on height. -->
|
||||||
|
|
||||||
|
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#8000ff00">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1" android:padding="4dp"
|
||||||
|
android:background="#80ff0000">
|
||||||
|
<include layout="@layout/resources_width" />
|
||||||
|
</FrameLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</merge>
|
||||||
33
samples/ApiDemos/res/layout/resources_width.xml
Normal file
33
samples/ApiDemos/res/layout/resources_width.xml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Part of resources_width_and_height that varies based on width. -->
|
||||||
|
|
||||||
|
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="Default Width\n#1">
|
||||||
|
</TextView>
|
||||||
|
<TextView android:layout_width="0px" android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" android:gravity="center_horizontal"
|
||||||
|
android:layout_marginLeft="4dp" android:layout_marginRight="4dp"
|
||||||
|
android:background="#800000ff" android:text="Default Width\n#2">
|
||||||
|
</TextView>
|
||||||
|
</LinearLayout>
|
||||||
|
</merge>
|
||||||
35
samples/ApiDemos/res/layout/resources_width_and_height.xml
Normal file
35
samples/ApiDemos/res/layout/resources_width_and_height.xml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Demonstrates using -wNNNdp and -hNNNdp resource configs. -->
|
||||||
|
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent" android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0" android:gravity="center_horizontal"
|
||||||
|
android:paddingTop="8dp" android:paddingBottom="8dp"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:text="@string/resources_width_and_height_description"/>
|
||||||
|
|
||||||
|
<FrameLayout android:layout_width="match_parent" android:layout_height="0px"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="@android:drawable/gallery_thumb">
|
||||||
|
<include layout="@layout/resources_height" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
@@ -17,42 +17,42 @@
|
|||||||
<!-- Demonstrates saving and restoring activity state.
|
<!-- Demonstrates saving and restoring activity state.
|
||||||
See corresponding Java code com.android.sdk.app.SaveRestoreState.java. -->
|
See corresponding Java code com.android.sdk.app.SaveRestoreState.java. -->
|
||||||
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="4dip"
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent" android:layout_height="match_parent">
|
android:layout_width="match_parent" android:layout_height="match_parent">
|
||||||
|
<LinearLayout android:orientation="vertical" android:padding="4dip"
|
||||||
|
android:layout_width="match_parent" android:layout_height="wrap_content">
|
||||||
|
|
||||||
<TextView android:id="@+id/msg"
|
<TextView android:id="@+id/msg"
|
||||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||||
android:layout_weight="0"
|
android:layout_weight="0" android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:paddingBottom="4dip" />
|
android:paddingBottom="4dip" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||||
android:layout_weight="0"
|
android:layout_weight="0" android:paddingBottom="4dip"
|
||||||
android:paddingBottom="4dip"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:text="@string/saves_state"/>
|
android:text="@string/saves_state"/>
|
||||||
|
|
||||||
<EditText android:id="@+id/saved"
|
<EditText android:id="@+id/saved"
|
||||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1" android:background="@drawable/green"
|
||||||
android:background="@drawable/green"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:text="@string/initial_text"
|
android:text="@string/initial_text"
|
||||||
android:freezesText="true">
|
android:freezesText="true">
|
||||||
<requestFocus />
|
</EditText>
|
||||||
</EditText>
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||||
android:layout_weight="0"
|
android:layout_weight="0" android:paddingTop="8dip" android:paddingBottom="4dip"
|
||||||
android:paddingTop="8dip"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:paddingBottom="4dip"
|
android:text="@string/no_saves_state"/>
|
||||||
android:text="@string/no_saves_state"/>
|
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1" android:background="@drawable/red"
|
||||||
android:background="@drawable/red"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:text="@string/initial_text">
|
android:text="@string/initial_text">
|
||||||
</EditText>
|
</EditText>
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</ScrollView>
|
||||||
|
|||||||
20
samples/ApiDemos/res/values-v13/bools.xml
Normal file
20
samples/ApiDemos/res/values-v13/bools.xml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<!-- True if running under Ice Cream Sandwich or later. -->
|
||||||
|
<bool name="atLeastIceCreamSandwich">true</bool>
|
||||||
|
</resources>
|
||||||
@@ -19,4 +19,8 @@
|
|||||||
API level. The default value is false; an alternative value
|
API level. The default value is false; an alternative value
|
||||||
for Honeycomb is true. -->
|
for Honeycomb is true. -->
|
||||||
<bool name="atLeastHoneycomb">false</bool>
|
<bool name="atLeastHoneycomb">false</bool>
|
||||||
|
<!-- This resource is true if running under at least Ice Cream Sandwich's
|
||||||
|
API level. The default value is false; an alternative value
|
||||||
|
for Ice Cream Sandwich is true. -->
|
||||||
|
<bool name="atLeastIceCreamSandwich">false</bool>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -134,8 +134,6 @@
|
|||||||
|
|
||||||
<string name="fragment_list_array">App/Fragment/List Array</string>
|
<string name="fragment_list_array">App/Fragment/List Array</string>
|
||||||
|
|
||||||
<string name="fragment_list_cursor_loader">App/Fragment/List Cursor Loader</string>
|
|
||||||
|
|
||||||
<string name="fragment_menu">App/Fragment/Menu</string>
|
<string name="fragment_menu">App/Fragment/Menu</string>
|
||||||
<string name="fragment_menu_msg">Build menus from two fragments, allowing
|
<string name="fragment_menu_msg">Build menus from two fragments, allowing
|
||||||
you to hide them to remove them..</string>
|
you to hide them to remove them..</string>
|
||||||
@@ -168,8 +166,6 @@
|
|||||||
|
|
||||||
<string name="fragment_list_array_support">Support/App/Fragment/List Array</string>
|
<string name="fragment_list_array_support">Support/App/Fragment/List Array</string>
|
||||||
|
|
||||||
<string name="fragment_list_cursor_loader_support">Support/App/Fragment/List Cursor Loader</string>
|
|
||||||
|
|
||||||
<string name="fragment_menu_support">Support/App/Fragment/Menu</string>
|
<string name="fragment_menu_support">Support/App/Fragment/Menu</string>
|
||||||
|
|
||||||
<string name="fragment_retain_instance_support">Support/App/Fragment/Retain Instance</string>
|
<string name="fragment_retain_instance_support">Support/App/Fragment/Retain Instance</string>
|
||||||
@@ -178,8 +174,16 @@
|
|||||||
|
|
||||||
<string name="fragment_stack_support">Support/App/Fragment/Stack</string>
|
<string name="fragment_stack_support">Support/App/Fragment/Stack</string>
|
||||||
|
|
||||||
|
<string name="fragment_pager_support">Support/App/Fragment/Pager</string>
|
||||||
|
|
||||||
|
<string name="loader_cursor">App/Loader/Cursor</string>
|
||||||
|
|
||||||
|
<string name="loader_custom">App/Loader/Custom</string>
|
||||||
|
|
||||||
<string name="loader_throttle">App/Loader/Throttle</string>
|
<string name="loader_throttle">App/Loader/Throttle</string>
|
||||||
|
|
||||||
|
<string name="loader_cursor_support">Support/App/Loader/Cursor</string>
|
||||||
|
|
||||||
<string name="loader_throttle_support">Support/Loader/Throttle</string>
|
<string name="loader_throttle_support">Support/Loader/Throttle</string>
|
||||||
|
|
||||||
<string name="activity_menu">App/Activity/Menu</string>
|
<string name="activity_menu">App/Activity/Menu</string>
|
||||||
@@ -348,13 +352,17 @@
|
|||||||
<string name="styled_text">Plain, <b>bold</b>, <i>italic</i>, <b><i>bold-italic</i></b></string>
|
<string name="styled_text">Plain, <b>bold</b>, <i>italic</i>, <b><i>bold-italic</i></b></string>
|
||||||
<string name="styled_text_prog">Assigned programmatically:</string>
|
<string name="styled_text_prog">Assigned programmatically:</string>
|
||||||
|
|
||||||
|
<string name="activity_resources_width_and_height">Content/Resources/Width and Height</string>
|
||||||
|
<string name="resources_width_and_height_description">The layouts below use -wNNNdp and
|
||||||
|
-hNNNdp to select between different versions based on the size of the screen.</string>
|
||||||
|
|
||||||
<string name="activity_read_asset">Content/Assets/Read Asset</string>
|
<string name="activity_read_asset">Content/Assets/Read Asset</string>
|
||||||
|
|
||||||
<string name="activity_themes">Content/Resources/Themes</string>
|
<string name="activity_themes">Content/Resources/Themes</string>
|
||||||
<string name="activity_resources">Content/Resources/Resources</string>
|
<string name="activity_resources">Content/Resources/Resources</string>
|
||||||
|
|
||||||
<string name="activity_pick_contact">Content/Provider/Pick Contact</string>
|
<string name="activity_pick_contact">Content/Provider/Pick Contact</string>
|
||||||
<string name="pick_contact_msg">Invoke Contacts to pick varius kinds of
|
<string name="pick_contact_msg">Invoke Contacts to pick various kinds of
|
||||||
contact data. None of these require that the caller hold the
|
contact data. None of these require that the caller hold the
|
||||||
READ_CONTACTS permission.</string>
|
READ_CONTACTS permission.</string>
|
||||||
<string name="pick_contact">Pick a Contact</string>
|
<string name="pick_contact">Pick a Contact</string>
|
||||||
|
|||||||
@@ -38,10 +38,10 @@ import android.widget.SimpleCursorAdapter;
|
|||||||
import android.widget.SearchView.OnQueryTextListener;
|
import android.widget.SearchView.OnQueryTextListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Demonstration of more complex use if a ListFragment, including showing
|
* Demonstration of the use of a CursorLoader to load and display contacts
|
||||||
* an empty view and loading progress.
|
* data in a fragment.
|
||||||
*/
|
*/
|
||||||
public class FragmentListCursorLoader extends Activity {
|
public class LoaderCursor extends Activity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -83,6 +83,9 @@ public class FragmentListCursorLoader extends Activity {
|
|||||||
new int[] { android.R.id.text1, android.R.id.text2 }, 0);
|
new int[] { android.R.id.text1, android.R.id.text2 }, 0);
|
||||||
setListAdapter(mAdapter);
|
setListAdapter(mAdapter);
|
||||||
|
|
||||||
|
// Start out with a progress indicator.
|
||||||
|
setListShown(false);
|
||||||
|
|
||||||
// Prepare the loader. Either re-connect with an existing one,
|
// Prepare the loader. Either re-connect with an existing one,
|
||||||
// or start a new one.
|
// or start a new one.
|
||||||
getLoaderManager().initLoader(0, null, this);
|
getLoaderManager().initLoader(0, null, this);
|
||||||
@@ -154,6 +157,9 @@ public class FragmentListCursorLoader extends Activity {
|
|||||||
// Swap the new cursor in. (The framework will take care of closing the
|
// Swap the new cursor in. (The framework will take care of closing the
|
||||||
// old cursor once we return.)
|
// old cursor once we return.)
|
||||||
mAdapter.swapCursor(data);
|
mAdapter.swapCursor(data);
|
||||||
|
|
||||||
|
// The list should now be shown.
|
||||||
|
setListShown(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onLoaderReset(Loader<Cursor> loader) {
|
public void onLoaderReset(Loader<Cursor> loader) {
|
||||||
@@ -0,0 +1,478 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2010 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.example.android.apis.app;
|
||||||
|
|
||||||
|
import com.example.android.apis.R;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.text.Collator;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.FragmentManager;
|
||||||
|
import android.app.ListFragment;
|
||||||
|
import android.app.LoaderManager;
|
||||||
|
import android.content.AsyncTaskLoader;
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
import android.content.Loader;
|
||||||
|
import android.content.pm.ActivityInfo;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.res.Configuration;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.SearchView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.SearchView.OnQueryTextListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Demonstration of the implementation of a custom Loader.
|
||||||
|
*/
|
||||||
|
public class LoaderCustom extends Activity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
FragmentManager fm = getFragmentManager();
|
||||||
|
|
||||||
|
// Create the list fragment and add it as our sole content.
|
||||||
|
if (fm.findFragmentById(android.R.id.content) == null) {
|
||||||
|
AppListFragment list = new AppListFragment();
|
||||||
|
fm.beginTransaction().add(android.R.id.content, list).commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//BEGIN_INCLUDE(loader)
|
||||||
|
/**
|
||||||
|
* This class holds the per-item data in our Loader.
|
||||||
|
*/
|
||||||
|
public static class AppEntry {
|
||||||
|
public AppEntry(AppListLoader loader, ApplicationInfo info) {
|
||||||
|
mLoader = loader;
|
||||||
|
mInfo = info;
|
||||||
|
mApkFile = new File(info.sourceDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ApplicationInfo getApplicationInfo() {
|
||||||
|
return mInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLabel() {
|
||||||
|
return mLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Drawable getIcon() {
|
||||||
|
if (mIcon == null) {
|
||||||
|
if (mApkFile.exists()) {
|
||||||
|
mIcon = mInfo.loadIcon(mLoader.mPm);
|
||||||
|
return mIcon;
|
||||||
|
} else {
|
||||||
|
mMounted = false;
|
||||||
|
}
|
||||||
|
} else if (!mMounted) {
|
||||||
|
// If the app wasn't mounted but is now mounted, reload
|
||||||
|
// its icon.
|
||||||
|
if (mApkFile.exists()) {
|
||||||
|
mMounted = true;
|
||||||
|
mIcon = mInfo.loadIcon(mLoader.mPm);
|
||||||
|
return mIcon;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return mIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mLoader.getContext().getResources().getDrawable(
|
||||||
|
android.R.drawable.sym_def_app_icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public String toString() {
|
||||||
|
return mLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadLabel(Context context) {
|
||||||
|
if (mLabel == null || !mMounted) {
|
||||||
|
if (!mApkFile.exists()) {
|
||||||
|
mMounted = false;
|
||||||
|
mLabel = mInfo.packageName;
|
||||||
|
} else {
|
||||||
|
mMounted = true;
|
||||||
|
CharSequence label = mInfo.loadLabel(context.getPackageManager());
|
||||||
|
mLabel = label != null ? label.toString() : mInfo.packageName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final AppListLoader mLoader;
|
||||||
|
private final ApplicationInfo mInfo;
|
||||||
|
private final File mApkFile;
|
||||||
|
private String mLabel;
|
||||||
|
private Drawable mIcon;
|
||||||
|
private boolean mMounted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform alphabetical comparison of application entry objects.
|
||||||
|
*/
|
||||||
|
public static final Comparator<AppEntry> ALPHA_COMPARATOR = new Comparator<AppEntry>() {
|
||||||
|
private final Collator sCollator = Collator.getInstance();
|
||||||
|
@Override
|
||||||
|
public int compare(AppEntry object1, AppEntry object2) {
|
||||||
|
return sCollator.compare(object1.getLabel(), object2.getLabel());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper for determining if the configuration has changed in an interesting
|
||||||
|
* way so we need to rebuild the app list.
|
||||||
|
*/
|
||||||
|
public static class InterestingConfigChanges {
|
||||||
|
final Configuration mLastConfiguration = new Configuration();
|
||||||
|
int mLastDensity;
|
||||||
|
|
||||||
|
boolean applyNewConfig(Resources res) {
|
||||||
|
int configChanges = mLastConfiguration.updateFrom(res.getConfiguration());
|
||||||
|
boolean densityChanged = mLastDensity != res.getDisplayMetrics().densityDpi;
|
||||||
|
if (densityChanged || (configChanges&(ActivityInfo.CONFIG_LOCALE
|
||||||
|
|ActivityInfo.CONFIG_UI_MODE|ActivityInfo.CONFIG_SCREEN_LAYOUT)) != 0) {
|
||||||
|
mLastDensity = res.getDisplayMetrics().densityDpi;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper class to look for interesting changes to the installed apps
|
||||||
|
* so that the loader can be updated.
|
||||||
|
*/
|
||||||
|
public static class PackageIntentReceiver extends BroadcastReceiver {
|
||||||
|
final AppListLoader mLoader;
|
||||||
|
|
||||||
|
public PackageIntentReceiver(AppListLoader loader) {
|
||||||
|
mLoader = loader;
|
||||||
|
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
|
||||||
|
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
|
||||||
|
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
|
||||||
|
filter.addDataScheme("package");
|
||||||
|
mLoader.getContext().registerReceiver(this, filter);
|
||||||
|
// Register for events related to sdcard installation.
|
||||||
|
IntentFilter sdFilter = new IntentFilter();
|
||||||
|
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
|
||||||
|
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
|
||||||
|
mLoader.getContext().registerReceiver(this, sdFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public void onReceive(Context context, Intent intent) {
|
||||||
|
// Tell the loader about the change.
|
||||||
|
mLoader.onContentChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom Loader that loads all of the installed applications.
|
||||||
|
*/
|
||||||
|
public static class AppListLoader extends AsyncTaskLoader<List<AppEntry>> {
|
||||||
|
final InterestingConfigChanges mLastConfig = new InterestingConfigChanges();
|
||||||
|
final PackageManager mPm;
|
||||||
|
|
||||||
|
List<AppEntry> mApps;
|
||||||
|
PackageIntentReceiver mPackageObserver;
|
||||||
|
|
||||||
|
public AppListLoader(Context context) {
|
||||||
|
super(context);
|
||||||
|
|
||||||
|
// Retrieve the package manager for later use; note we don't
|
||||||
|
// use 'context' directly but instead the save global application
|
||||||
|
// context returned by getContext().
|
||||||
|
mPm = getContext().getPackageManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is where the bulk of our work is done. This function is
|
||||||
|
* called in a background thread and should generate a new set of
|
||||||
|
* data to be published by the loader.
|
||||||
|
*/
|
||||||
|
@Override public List<AppEntry> loadInBackground() {
|
||||||
|
// Retrieve all known applications.
|
||||||
|
List<ApplicationInfo> apps = mPm.getInstalledApplications(
|
||||||
|
PackageManager.GET_UNINSTALLED_PACKAGES |
|
||||||
|
PackageManager.GET_DISABLED_COMPONENTS);
|
||||||
|
if (apps == null) {
|
||||||
|
apps = new ArrayList<ApplicationInfo>();
|
||||||
|
}
|
||||||
|
|
||||||
|
final Context context = getContext();
|
||||||
|
|
||||||
|
// Create corresponding array of entries and load their labels.
|
||||||
|
List<AppEntry> entries = new ArrayList<AppEntry>(apps.size());
|
||||||
|
for (int i=0; i<apps.size(); i++) {
|
||||||
|
AppEntry entry = new AppEntry(this, apps.get(i));
|
||||||
|
entry.loadLabel(context);
|
||||||
|
entries.add(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort the list.
|
||||||
|
Collections.sort(entries, ALPHA_COMPARATOR);
|
||||||
|
|
||||||
|
// Done!
|
||||||
|
return entries;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when there is new data to deliver to the client. The
|
||||||
|
* super class will take care of delivering it; the implementation
|
||||||
|
* here just adds a little more logic.
|
||||||
|
*/
|
||||||
|
@Override public void deliverResult(List<AppEntry> apps) {
|
||||||
|
if (isReset()) {
|
||||||
|
// An async query came in while the loader is stopped. We
|
||||||
|
// don't need the result.
|
||||||
|
if (apps != null) {
|
||||||
|
onReleaseResources(apps);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<AppEntry> oldApps = apps;
|
||||||
|
mApps = apps;
|
||||||
|
|
||||||
|
if (isStarted()) {
|
||||||
|
// If the Loader is currently started, we can immediately
|
||||||
|
// deliver its results.
|
||||||
|
super.deliverResult(apps);
|
||||||
|
}
|
||||||
|
|
||||||
|
// At this point we can release the resources associated with
|
||||||
|
// 'oldApps' if needed; now that the new result is delivered we
|
||||||
|
// know that it is no longer in use.
|
||||||
|
if (oldApps != null) {
|
||||||
|
onReleaseResources(oldApps);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles a request to start the Loader.
|
||||||
|
*/
|
||||||
|
@Override protected void onStartLoading() {
|
||||||
|
if (mApps != null) {
|
||||||
|
// If we currently have a result available, deliver it
|
||||||
|
// immediately.
|
||||||
|
deliverResult(mApps);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start watching for changes in the app data.
|
||||||
|
if (mPackageObserver == null) {
|
||||||
|
mPackageObserver = new PackageIntentReceiver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Has something interesting in the configuration changed since we
|
||||||
|
// last built the app list?
|
||||||
|
boolean configChange = mLastConfig.applyNewConfig(getContext().getResources());
|
||||||
|
|
||||||
|
if (takeContentChanged() || mApps == null || configChange) {
|
||||||
|
// If the data has changed since the last time it was loaded
|
||||||
|
// or is not currently available, start a load.
|
||||||
|
forceLoad();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles a request to stop the Loader.
|
||||||
|
*/
|
||||||
|
@Override protected void onStopLoading() {
|
||||||
|
// Attempt to cancel the current load task if possible.
|
||||||
|
cancelLoad();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles a request to cancel a load.
|
||||||
|
*/
|
||||||
|
@Override public void onCanceled(List<AppEntry> apps) {
|
||||||
|
super.onCanceled(apps);
|
||||||
|
|
||||||
|
// At this point we can release the resources associated with 'apps'
|
||||||
|
// if needed.
|
||||||
|
onReleaseResources(apps);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles a request to completely reset the Loader.
|
||||||
|
*/
|
||||||
|
@Override protected void onReset() {
|
||||||
|
super.onReset();
|
||||||
|
|
||||||
|
// Ensure the loader is stopped
|
||||||
|
onStopLoading();
|
||||||
|
|
||||||
|
// At this point we can release the resources associated with 'apps'
|
||||||
|
// if needed.
|
||||||
|
if (mApps != null) {
|
||||||
|
onReleaseResources(mApps);
|
||||||
|
mApps = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stop monitoring for changes.
|
||||||
|
if (mPackageObserver != null) {
|
||||||
|
getContext().unregisterReceiver(mPackageObserver);
|
||||||
|
mPackageObserver = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to take care of releasing resources associated
|
||||||
|
* with an actively loaded data set.
|
||||||
|
*/
|
||||||
|
protected void onReleaseResources(List<AppEntry> apps) {
|
||||||
|
// For a simple List<> there is nothing to do. For something
|
||||||
|
// like a Cursor, we would close it here.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//END_INCLUDE(loader)
|
||||||
|
|
||||||
|
//BEGIN_INCLUDE(fragment)
|
||||||
|
public static class AppListAdapter extends ArrayAdapter<AppEntry> {
|
||||||
|
private final LayoutInflater mInflater;
|
||||||
|
|
||||||
|
public AppListAdapter(Context context) {
|
||||||
|
super(context, android.R.layout.simple_list_item_2);
|
||||||
|
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(List<AppEntry> data) {
|
||||||
|
clear();
|
||||||
|
if (data != null) {
|
||||||
|
addAll(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate new items in the list.
|
||||||
|
*/
|
||||||
|
@Override public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
View view;
|
||||||
|
|
||||||
|
if (convertView == null) {
|
||||||
|
view = mInflater.inflate(R.layout.list_item_icon_text, parent, false);
|
||||||
|
} else {
|
||||||
|
view = convertView;
|
||||||
|
}
|
||||||
|
|
||||||
|
AppEntry item = getItem(position);
|
||||||
|
((ImageView)view.findViewById(R.id.icon)).setImageDrawable(item.getIcon());
|
||||||
|
((TextView)view.findViewById(R.id.text)).setText(item.getLabel());
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class AppListFragment extends ListFragment
|
||||||
|
implements OnQueryTextListener, LoaderManager.LoaderCallbacks<List<AppEntry>> {
|
||||||
|
|
||||||
|
// This is the Adapter being used to display the list's data.
|
||||||
|
AppListAdapter mAdapter;
|
||||||
|
|
||||||
|
// If non-null, this is the current filter the user has provided.
|
||||||
|
String mCurFilter;
|
||||||
|
|
||||||
|
@Override public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
|
super.onActivityCreated(savedInstanceState);
|
||||||
|
|
||||||
|
// Give some text to display if there is no data. In a real
|
||||||
|
// application this would come from a resource.
|
||||||
|
setEmptyText("No applications");
|
||||||
|
|
||||||
|
// We have a menu item to show in action bar.
|
||||||
|
setHasOptionsMenu(true);
|
||||||
|
|
||||||
|
// Create an empty adapter we will use to display the loaded data.
|
||||||
|
mAdapter = new AppListAdapter(getActivity());
|
||||||
|
setListAdapter(mAdapter);
|
||||||
|
|
||||||
|
// Start out with a progress indicator.
|
||||||
|
setListShown(false);
|
||||||
|
|
||||||
|
// Prepare the loader. Either re-connect with an existing one,
|
||||||
|
// or start a new one.
|
||||||
|
getLoaderManager().initLoader(0, null, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
|
// Place an action bar item for searching.
|
||||||
|
MenuItem item = menu.add("Search");
|
||||||
|
item.setIcon(android.R.drawable.ic_menu_search);
|
||||||
|
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
|
||||||
|
SearchView sv = new SearchView(getActivity());
|
||||||
|
sv.setOnQueryTextListener(this);
|
||||||
|
item.setActionView(sv);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public boolean onQueryTextChange(String newText) {
|
||||||
|
// Called when the action bar search text has changed. Since this
|
||||||
|
// is a simple array adapter, we can just have it do the filtering.
|
||||||
|
mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
|
||||||
|
mAdapter.getFilter().filter(mCurFilter);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public boolean onQueryTextSubmit(String query) {
|
||||||
|
// Don't care about this.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public void onListItemClick(ListView l, View v, int position, long id) {
|
||||||
|
// Insert desired behavior here.
|
||||||
|
Log.i("LoaderCustom", "Item clicked: " + id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public Loader<List<AppEntry>> onCreateLoader(int id, Bundle args) {
|
||||||
|
// This is called when a new Loader needs to be created. This
|
||||||
|
// sample only has one Loader with no arguments, so it is simple.
|
||||||
|
return new AppListLoader(getActivity());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public void onLoadFinished(Loader<List<AppEntry>> loader, List<AppEntry> data) {
|
||||||
|
// Set the new data in the adapter.
|
||||||
|
mAdapter.setData(data);
|
||||||
|
|
||||||
|
// The list should now be shown.
|
||||||
|
setListShown(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public void onLoaderReset(Loader<List<AppEntry>> loader) {
|
||||||
|
// Clear the data in the adapter.
|
||||||
|
mAdapter.setData(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//END_INCLUDE(fragment)
|
||||||
|
}
|
||||||
@@ -119,10 +119,6 @@
|
|||||||
<dt><a href="FragmentListArray.html">Fragment List Array</a></dt>
|
<dt><a href="FragmentListArray.html">Fragment List Array</a></dt>
|
||||||
<dd>Demonstrates use of ListFragment to show the contents of a simple ArrayAdapter.</dd>
|
<dd>Demonstrates use of ListFragment to show the contents of a simple ArrayAdapter.</dd>
|
||||||
|
|
||||||
<dt><a href="FragmentListCursorLoader.html">Fragment List Cursor Loader</a></dt>
|
|
||||||
<dd>Demonstrates use of LoaderManager to perform a query for a Cursor that
|
|
||||||
populates a ListFragment.</dd>
|
|
||||||
|
|
||||||
<dt><a href="FragmentMenu.html">Fragment Menu</a></dt>
|
<dt><a href="FragmentMenu.html">Fragment Menu</a></dt>
|
||||||
<dd>Demonstrates populating custom menu items from a Fragment.</dd>
|
<dd>Demonstrates populating custom menu items from a Fragment.</dd>
|
||||||
|
|
||||||
@@ -162,6 +158,10 @@ Mechanics.</dd>
|
|||||||
|
|
||||||
<h3 id="LoaderManager">LoaderManager</h3>
|
<h3 id="LoaderManager">LoaderManager</h3>
|
||||||
<dl>
|
<dl>
|
||||||
|
<dt><a href="LoaderCursor.html">Loader Cursor</a></dt>
|
||||||
|
<dd>Demonstrates use of LoaderManager to perform a query for a Cursor that
|
||||||
|
populates a ListFragment.</dd>
|
||||||
|
|
||||||
<dt><a href="LoaderThrottle.html">Loader Throttle</a></dt>
|
<dt><a href="LoaderThrottle.html">Loader Throttle</a></dt>
|
||||||
<dd>Complete end-to-end demonstration of a simple content provider that
|
<dd>Complete end-to-end demonstration of a simple content provider that
|
||||||
populates data in a list through a cursor loader. The UI allows the list
|
populates data in a list through a cursor loader. The UI allows the list
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.example.android.apis.content;
|
||||||
|
|
||||||
|
import com.example.android.apis.R;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
public class ResourcesWidthAndHeight extends Activity {
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
// This layout uses different configurations to adjust
|
||||||
|
// what is shown based on the current screen width and height.
|
||||||
|
setContentView(R.layout.resources_width_and_height);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.example.android.apis.support.app;
|
||||||
|
|
||||||
|
import com.example.android.apis.R;
|
||||||
|
import com.example.android.apis.Shakespeare;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentActivity;
|
||||||
|
import android.support.v4.app.FragmentPager;
|
||||||
|
import android.support.v4.app.FragmentTransaction;
|
||||||
|
import android.support.v4.app.ListFragment;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
public class FragmentPagerSupport extends FragmentActivity
|
||||||
|
implements FragmentPager.Adapter {
|
||||||
|
static final int NUM_ITEMS = 10;
|
||||||
|
|
||||||
|
FragmentPager mPager;
|
||||||
|
int mCurPos;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.fragment_pager);
|
||||||
|
|
||||||
|
mPager = (FragmentPager)findViewById(R.id.pager);
|
||||||
|
mPager.setAdapter(this);
|
||||||
|
|
||||||
|
// Watch for button clicks.
|
||||||
|
Button button = (Button)findViewById(R.id.new_fragment);
|
||||||
|
button.setOnClickListener(new OnClickListener() {
|
||||||
|
public void onClick(View v) {
|
||||||
|
mCurPos++;
|
||||||
|
if (mCurPos < NUM_ITEMS) {
|
||||||
|
mPager.setCurrentItem(mCurPos);
|
||||||
|
} else {
|
||||||
|
mCurPos--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return NUM_ITEMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Fragment getItem(int position) {
|
||||||
|
return ArrayListFragment.newInstance(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ArrayListFragment extends ListFragment {
|
||||||
|
int mNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance of CountingFragment, providing "num"
|
||||||
|
* as an argument.
|
||||||
|
*/
|
||||||
|
static ArrayListFragment newInstance(int num) {
|
||||||
|
ArrayListFragment f = new ArrayListFragment();
|
||||||
|
|
||||||
|
// Supply num input as an argument.
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putInt("num", num);
|
||||||
|
f.setArguments(args);
|
||||||
|
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When creating, retrieve this instance's number from its arguments.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
mNum = getArguments() != null ? getArguments().getInt("num") : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Fragment's UI is just a simple text view showing its
|
||||||
|
* instance number.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
View v = inflater.inflate(R.layout.fragment_pager_list, container, false);
|
||||||
|
View tv = v.findViewById(R.id.text);
|
||||||
|
((TextView)tv).setText("Fragment #" + mNum);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
|
super.onActivityCreated(savedInstanceState);
|
||||||
|
setListAdapter(new ArrayAdapter<String>(getActivity(),
|
||||||
|
android.R.layout.simple_list_item_1, Shakespeare.TITLES));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onListItemClick(ListView l, View v, int position, long id) {
|
||||||
|
Log.i("FragmentList", "Item clicked: " + id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,10 +37,10 @@ import android.view.View;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Demonstration of more complex use if a ListFragment, including showing
|
* Demonstration of the use of a CursorLoader to load and display contacts
|
||||||
* an empty view and loading progress.
|
* data in a fragment.
|
||||||
*/
|
*/
|
||||||
public class FragmentListCursorLoaderSupport extends FragmentActivity {
|
public class LoaderCursorSupport extends FragmentActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
Reference in New Issue
Block a user