Fragment是Android honeycomb 3.0新增的概念,Android——Fragment介绍、Android Fragment使用Android FragmentManage FragmentTransaction介绍中做了关于Fragment的详细介绍。这一片主要通过一个实例了解Fragment的使用。

先看下实例效果图:

Android UI开发第十七篇——Android Fragment实例_第1张图片

效果图的左边是一个列表,右边是列表item的详情。

先看一下布局文件(layout):

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal" android:layout_width="match_parent"android:layout_height="match_parent"><fragmentclass="com.fragment.main.TitlesFragment"android:id="@+id/titles" android:layout_weight="1"android:layout_width="0px" android:layout_height="match_parent" /><FrameLayout android:id="@+id/details" android:layout_weight="1"android:layout_width="0px" android:layout_height="match_parent"android:background="?android:attr/detailsElementBackground" /></LinearLayout>

布局文件中使用了fragment标签和FrameLayout标签。Android Fragment使用中介绍了2中嵌入Fragment的方法,这个实例中都用到,从布局文件看到有了fragment标签,这是一种使用方法,FrameLayout标签将会成为第二种加载fragment的载体view。

看一下程序实现(com.fragment.main.TitlesFragment):

public class TitlesFragment extends ListFragment {int mCurCheckPosition = 0;int mShownCheckPosition = -1;@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState); setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_activated_1,Shakespeare.TITLES)); //使用静态数组填充列表if (savedInstanceState != null) { mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);mShownCheckPosition = savedInstanceState.getInt("shownChoice", -1);} getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); showDetails(mCurCheckPosition);}@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt("curChoice", mCurCheckPosition);outState.putInt("shownChoice", mShownCheckPosition);}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {showDetails(position);}/** *显示listview item 详情 */void showDetails(int index) {mCurCheckPosition = index;getListView().setItemChecked(index, true);if (mShownCheckPosition != mCurCheckPosition) {DetailsFragment df = DetailsFragment.newInstance(index);  FragmentTransaction ft = getFragmentManager().beginTransaction();ft.replace(R.id.details, df);ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);ft.commit();mShownCheckPosition = index;}}}


TitlesFragment

TitlesFragment继承自Fragment的子类ListFragment,使用了一个静态数组填充列表,重写了onListItemClick方法,showDetails方法展示ListView item的详情。

DetailsFragment df = DetailsFragment.newInstance(index);//获取详情Fragment的实例

FragmentTransaction ft = getFragmentManager().beginTransaction();//获取FragmentTransaction 实例

ft.replace(R.id.details, df); //使用DetailsFragment 的实例

ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

ft.commit();//提交

这里就使用到了Android Fragment使用中介绍的第二种加载fragment的方法。看一下DetailsFragment :

public class DetailsFragment extends Fragment {/**     * Create a new instance of DetailsFragment, initialized to     * show the text at 'index'.     */public static DetailsFragment newInstance(int index) {DetailsFragment f = new DetailsFragment();// Supply index input as an argument.        Bundle args = new Bundle();args.putInt("index", index);f.setArguments(args);return f;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if (container == null) {            return null;}ScrollView scroller = new ScrollView(getActivity());TextView text = new TextView(getActivity());int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources().getDisplayMetrics());text.setPadding(padding, padding, padding, padding);scroller.addView(text);text.setText(Shakespeare.DIALOGUE[getArguments().getInt("index", 0)]);return scroller;}}


DetailsFragment 中使用newInstance(int index)方法产生DetailsFragment 实例并接受整型参数,重载了onCreateView方法创建view。

这个例子基本完成了,主要介绍的是在3.0以后的使用方法,其实Fragment在SDK1.6之后就可以使用了,在1.6上使用需要借助android-support-v4.jar包实现。android-support-v4.jar在:SDK根目录\extras\android\compatibility\v4下可以找到,如果想了解Fragment在SDK1.6上怎么实现的请参考Fragment 在Android SDK1.6上实现。

/**
* @author 张兴业
* 邮箱: xy-zhang#163.com
* android开发进阶群: 278401545
*
*/


更多相关文章

  1. android软键盘把页面挤上去的解决方法
  2. 解决EditText不显示光标的三种方法(总结)
  3. Android获取其他包的Context实例
  4. JS判断Android、iOS或浏览器的多种方法(四种方法)
  5. android布局实例代码
  6. android相对布局实例—登录界面
  7. Android View onMeasure 方法
  8. Android Studio 3.0以后打包修改文件名方法
  9. 【Android】android开发过程遇到的问题以及解决方法总结

随机推荐

  1. GridView 实现水平拖拉效果
  2. Android应用程序获取ROOT权限的方法(andr
  3. Android中动态设置布局高度一致
  4. Activity半透明效果
  5. Android(安卓)Fresco图片处理库用法API英
  6. android 银联支付接入报nullexception异
  7. android 内核添加tourch screen
  8. android listview check 事件
  9. 横向 纵向结合的ScrollView
  10. android 遍历安装过的包名