Fragement简单使用方法

Fragement

//app包下的使用
静态使用方法

  • 创建Fragment的XML布局

  • 创建Fragment类(将XML布局文件与Fragment类相结合)
    重写OnCreateView方法,该方法主要定义Fragment的布局,以View对象的方式返回Fragment的视图()
    //生命周期方法,第一次绘制Fragment用户界面时调用
    //LayoutInflater inflater表示布局填充器或者加载器,将XML文件转换成View对象
    ( View view = inflater(R.layout.fraament,null) return view;)//该中方式可以在Fragment类中获取相应的实例
    (return inlater.inflate(R.layout.fargment.nul;l))//该方法用于无需获取相应实例的时候
    //ViewGroup container表示当前Fragment插入Activity的布局视图对象
    //Bundle savedInstanceState表示存储上一个Fragment的信息

  • 将Fragment从Activity的布局文件中引入
    //android:name=”fragment的包名.类名”

动态使用方法

  • 创建Fragment的XML布局文件
  • 创建Fragment类(将XML布局文件与Fragment类相结合)
  • (Activity)创建Fragment的管理对象
    FragmentManager fragmentManager = getSupportFragmentManager();
  • (Activity)创建Fragmnet的事务对象并开启
    FragmentTransaction transaction = fragmentManager.beginTransaction();
  • (Activity)调用事务的动态方法动态的添加、移除、替换Fragment
    transaction.add(R.id.acticity_title_layout,new TitleFragment);//将传入的Fragment对象添加到指定位置
    transaction.replace(R.id.fragment_floor,fragment);//将指定位置的Fragment对象替换
    transaction.replace(oldFragment1,newFragment);//将指定的Fragment对象替换为传入Fragment对象
  • (Activity)提交事务
    transaction.commit();

<为兼容低版本的设备,可以使用V4包下的Fragment>

  • 使用注意事项
    使用V4包下的Fragment时需要引入的Activity需要继承FragmentActivity
    获取FragmentManager对象时需要调用getSupportManager()方法获取对象
    使用V4包下的Fragment时相关的对象需要导入对应的V4包下

生命周期

  • onAttach//当Activity和Fragment产生关联时回调的方法
  • onCreate//Fragment**第一次**被创建时调用的方法
  • onCreateView//Fragment**第一次**绘制用户界面的时候调用
  • onActivityCreated//当前Fragment所属Acticity创建成功时调用的方法
  • onStart//Fragment**可见**时调用
  • onResum//Fragment**获取**界面焦点时调用
  • onPause//Fragment**失去**界面焦点时调用
  • onStop//Fragment**不可见**时调用

    <当Fragment被替换时其余Activity的关联被销毁包括其本身,重新切换回来时重新创建关联以及其本身>
    <当用户按下Home键退出界面时,Fragment实例与Activity的关联以及其本身不会被销毁,而是会调用onStop方法,回到程序是会调用reStar方法重新成为可见状态>
    <当用户点击返回按钮时,Fragment与Activity的关联以及自身都被销毁>

Fragment传值

- Activity向Fragment传值

(Activity)
//创建Bundle类型的容器用于传递数据(指定类型:键值对型容器)
Bundle bundle = new Bundle();
bundle.putString(“info”,info);
//创建一个ResultFragment类实例,用于传递数据
ResultFragment resultFragment = new ResultFragment();
//调用ResultFragment实例的setArguments方法将Bundle数据传入该实例中
resultFragment.setArgument(bundle);
//调用Transaction的增、删、改、查方法时传入Bundle数据
例:transaction.replace.(R.id.layout,bundle) ; transaction.commit();

(Fragment)
//在Fragment类中调用getArgument()方法
Bundle bundle = getArgument();
bundle.getString(info);

Activity向Fragment传值

(1)Fragment中定义传值的回调接口,在生命周期的onAttach()方法中获取接口的实例
    //Fragment中定义接口,接口中定义回传数据的函数
    例:public interface MyListener{
        public abstract void sendMessage( String str );
        }
    //Fragment中创建接口实例获取Activity从传入的监听接口
    例:private MyListener myLitener;
    //重写Fragment的onCreate或者onAttach方法获取监听实例
    例:public void onCreate(Bundle saveInstanceState){
       super.onCreate(saveInstanceState);
       mListener = (MyListener) getActivity();(获取Activity中的接口)}

(2)Fragment需要传值的位置调用接口回调方法传值
    例:mListener.

(3)Activity实现回调接口重写回调方法获取传递的值
    //Activity实现监听接口中的方法,对返回的数据执行相应的数据操作

Activity中的Fragment与Fragment互相传值

(1)可通过将以上两种方式结合的形式,实现Fragment间的传值(略)

(2)可以通过在某个Fragment中获取到同Activity中的其它Fragment实例,实现调用其它Fragment中的类方法
//(Fragment)
例:调用getFragmentManager的findFragmentById的方法获取同一Activity中的其它Fragment实例
OtherFragment otherFragment = (OtherFragment) getFragmentManager().findFragmentById(R.id.otherFragment);

(3)类似于方法2获取同Activity中的其它Fragment的控件实例(首先获得FragmentManager对象,再获取Fragment对象, 再获取Fragment的View对象,再通过View的findViewById方法获取实例)
//(Fragment)
例:TextView textView = getFragmentManager().findFragmentById(R.id.otherFragment)
.getView().findViewById(r.id.textView)

(4)直接调用getActivity()方法获取Activity实例,再调用findViewById()方法直接获取目标控件
//(Fragment)
TextView textView = getActivity().finfViewById(R.id.textView);

ListFragment的应用

<适用于Fragment单纯的展示一个ListView>
(1)myFragment的布局默认包含一个ListView
需要定义一个LsitView(其标签必须指定为系统id:@id/android:list 意为:androidR.id.list)
(2)ListView绑定数据
例:public void onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragmentList,null);
list = new ArrayList [String] ();
for( int i =0 ; i<20 ; i++ ){
list.add(“item”+i)}
ArrayAdapter[String] adapter = new ArrayAdapter[String] (getActivity(),android.R.layout.simple_list_item_1,list);
setListAdapter(adapter);
return View ;
}
//设置点击ListView点击事件ListView点击的ListView、View点击的子项、position子项的位置
**public void onListItemClick(ListVew I,View v, int position , long id )
{**
super.onListItemClick(I,v,position,id);
}

(3)myFragment需要继承ListFragment

DialogFragment的应用

(1)创建MyDialogFragment

public class MyDialogFragment extends DialogFragment{
//Fragment
public void onCreateDialog(Bundle savedInstanceState){
AlertDialog.Builde builder = new AlertDialog.Builde
.builder.setTitle(“”);
.builder.setMessage(“”);
.builder.setIcon(R.id.drawable.picture);
.builder.setPositiveButton(“确定”,new OnClickListener(){
@overage
public void onClick(DialogInterface dialog, int which){
}
});
return builder.creater;//返回Dialog对象
}

(2)Activity中调用
MyDialogFragment fragment = new MyDialogFragment();
fragment.show(getFragmentManager(),”dialog”);
//使用MyDialogFragment的好处在于,可以在屏幕横竖屏切换时保存数据,避免Dialog对话框在切换横竖屏时由于销毁重新创建对象时导致的数据丢失,适用于类似创建账户等对话框(避免由于用户的横竖屏切换导致用户输入的数据丢失)

猜你喜欢

转载自blog.csdn.net/qq_43044875/article/details/82385999