Android Fragments 详细使用
生活随笔
收集整理的這篇文章主要介紹了
Android Fragments 详细使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Fragments 誕生初衷
? ? ? Fragments 設計理念
Fragments的生命周期?
Fragments 的類別
Fragments 的詳細使用?
<?xml?version="1.0"?encoding="utf-8"?><LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"
????android:layout_width="match_parent"
????android:layout_height="match_parent"
????android:orientation="horizontal"?>
???<fragment?class="com.xuzhi.fragment.FragmentDemoActivity$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"
???????></FrameLayout>
</LinearLayout> 復制代碼 package?com.xuzhi.fragment;
import?android.app.Activity;
import?android.app.AlertDialog;
import?android.app.Fragment;
import?android.app.FragmentTransaction;
import?android.app.ListFragment;
import?android.os.Bundle;
import?android.util.TypedValue;
import?android.view.LayoutInflater;
import?android.view.View;
import?android.view.ViewGroup;
import?android.widget.ArrayAdapter;
import?android.widget.ListView;
import?android.widget.ScrollView;
import?android.widget.TextView;
public?class?FragmentDemoActivity?extends?Activity?{
????public?static?String[]?array?=?{?"text1,",?"text2",?"text3",?"text4",
????????????"text5,",?"text6",?"text7",?"text8"?};
????/**?Called?when?the?activity?is?first?created.?*/
????@Override
????public?void?onCreate(Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);?
????????setContentView(R.layout.main);
????}
????????
????public?static?class?TitlesFragment?extends?ListFragment?{
????????boolean?mDualPane;
????????int?mCurCheckPosition?=?0;
????????
????????@Override
????????public?void?onCreate(Bundle?savedInstanceState)?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onCreate(savedInstanceState);
????????????System.out.println("Fragment-->onCreate");
????????}
????????
????????@Override
????????public?View?onCreateView(LayoutInflater?inflater,?ViewGroup?container,
????????????????Bundle?savedInstanceState)?{
????????????//?TODO?Auto-generated?method?stub
????????????System.out.println("Fragment-->onCreateView");
????????????return?super.onCreateView(inflater,?container,?savedInstanceState);
????????}
????????
????????@Override
????????public?void?onPause()?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onPause();
????????????System.out.println("Fragment-->onPause");
????????}
????????
????????
????????@Override
????????public?void?onStop()?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onStop();
????????????
????????????System.out.println("Fragment-->onStop");
????????}
????????
????????@Override
????????public?void?onAttach(Activity?activity)?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onAttach(activity);
????????????System.out.println("Fragment-->onAttach");
????????}
????????
????????@Override
????????public?void?onStart()?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onStart();
????????????System.out.println("Fragment-->onStart");
????????}
????????
????????@Override
????????public?void?onResume()?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onResume();
????????????System.out.println("Fragment-->onResume");
????????}
????????
????????@Override
????????public?void?onDestroy()?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onDestroy();
????????????System.out.println("Fragment-->onDestroy");
????????}
????????
????????
????????@Override
????????public?void?onActivityCreated(Bundle?savedInstanceState)?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onActivityCreated(savedInstanceState);
????????????System.out.println("Fragment-->onActivityCreted");
????????????setListAdapter(new?ArrayAdapter<String>(getActivity(),
????????????????????android.R.layout.simple_list_item_1,?array));
????????????View?detailsFrame?=?getActivity().findViewById(R.id.details);
????????????mDualPane?=?detailsFrame?!=?null
????????????????????&&?detailsFrame.getVisibility()?==?View.VISIBLE;
????????????if?(savedInstanceState?!=?null)?{
????????????????mCurCheckPosition?=?savedInstanceState.getInt("curChoice",?0);?//從保存的狀態中取出數據
????????????}
????????????if?(mDualPane)?{
????????????????getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
????????????????showDetails(mCurCheckPosition);
????????????}
????????}
????????@Override
????????public?void?onSaveInstanceState(Bundle?outState)?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onSaveInstanceState(outState);
????????????outState.putInt("curChoice",?mCurCheckPosition);//保存當前的下標
????????}
????????@Override
????????public?void?onListItemClick(ListView?l,?View?v,?int?position,?long?id)?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onListItemClick(l,?v,?position,?id);
????????????showDetails(position);
????????}
????????void?showDetails(int?index)?{
????????????mCurCheckPosition?=?index;?
????????????if?(mDualPane)?{
????????????????getListView().setItemChecked(index,?true);
????????????????DetailsFragment?details?=?(DetailsFragment)?getFragmentManager()
????????????????????????.findFragmentById(R.id.details);?
????????????????if?(details?==?null?||?details.getShownIndex()?!=?index)?{
????????????????????details?=?DetailsFragment.newInstance(mCurCheckPosition);?
????????????????????//得到一個fragment?事務(類似sqlite的操作)
????????????????????FragmentTransaction?ft?=?getFragmentManager()
????????????????????????????.beginTransaction();
????????????????????ft.replace(R.id.details,?details);//將得到的fragment?替換當前的viewGroup內容,add則不替換會依次累加
????????????????????ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);//設置動畫效果
????????????????????ft.commit();//提交
????????????????}
????????????}?else?{
????????????????new?AlertDialog.Builder(getActivity()).setTitle(
????????????????????????android.R.string.dialog_alert_title).setMessage(
????????????????????????array[index]).setPositiveButton(android.R.string.ok,
????????????????????????null).show();
????????????}
????????}
????}
????/**
?????*?作為界面的一部分,為fragment?提供一個layout
?????*?@author?terry
?????*
?????*/
????public?static?class?DetailsFragment?extends?Fragment?{
????????public?static?DetailsFragment?newInstance(int?index)?{?
????????????DetailsFragment?details?=?new?DetailsFragment();
????????????Bundle?args?=?new?Bundle();
????????????args.putInt("index",?index);
????????????details.setArguments(args);
????????????return?details;
????????}
????????public?int?getShownIndex()?{
????????????return?getArguments().getInt("index",?0);
????????}
????????@Override
????????public?View?onCreateView(LayoutInflater?inflater,?ViewGroup?container,
????????????????Bundle?savedInstanceState)?{
????????????//?TODO?Auto-generated?method?stub
????????????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(array[getShownIndex()]);
????????????return?scroller;
????????}
????}
} 復制代碼
public?static?class?DetailsFragment?extends?Fragment?{
????????@Override
????????public?void?onCreate(Bundle?savedInstanceState)?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onCreate(savedInstanceState);
????????????setHasOptionsMenu(true);
????????}
} 復制代碼 之后的操作即可以像平常Android的menu用法一樣,代碼為:
@Override
????????public?void?onCreateOptionsMenu(Menu?menu,?MenuInflater?inflater)?{
????????????//?TODO?Auto-generated?method?stub
????????????super.onCreateOptionsMenu(menu,?inflater);
?????????????menu.add("Menu?1a").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
????????????????menu.add("Menu?1b").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
????????}
????????
????????@Override
????????public?boolean?onOptionsItemSelected(MenuItem?item)?{
????????????//?TODO?Auto-generated?method?stub
????????????Toast.makeText(getActivity(),?"index?is"+getShownIndex()+"?&&?menu?text?is?"+item.getTitle(),?1000).show();
????????????return?super.onOptionsItemSelected(item);
????????} 復制代碼
總結
以上是生活随笔為你收集整理的Android Fragments 详细使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android大图片裁剪终极解决方案 原
- 下一篇: Android中AutoComplete