New API demo for the support library FragmentPager class.

Change-Id: I3da4c9fe83cac48054f1efaa40b1f57f68402faa
This commit is contained in:
Dianne Hackborn
2011-04-04 18:52:04 -07:00
parent 105b40da3f
commit 38eafa95f7
6 changed files with 260 additions and 32 deletions

View File

@@ -475,6 +475,14 @@
</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 -->
<!-- BEGIN_INCLUDE(loader_throttle) --> <!-- BEGIN_INCLUDE(loader_throttle) -->

View 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>

View 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>

View File

@@ -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>

View File

@@ -178,6 +178,8 @@
<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_throttle">App/Loader/Throttle</string> <string name="loader_throttle">App/Loader/Throttle</string>
<string name="loader_throttle_support">Support/Loader/Throttle</string> <string name="loader_throttle_support">Support/Loader/Throttle</string>

View File

@@ -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);
}
}
}