全国统一24小时服务热线:400-0000-889400-0000-889  / 13999887799

架构说

当前位置:主页 > 架构说 >

Android Fragment,androidfragment

发布时间:2019-01-31 09:24 作者:AG集&# 来源:AG集团 点击: 字号:

Android Fragment,androidfragment
生命周期:

onAttach,onCreate,onCreateView,onActivityCreated,onStart,onResume,

onPause,onStop,onDestroyView,onDestroyView,onDetach

三种类别:

DialogFragment

对话框式的Fragments,可以将一个fragments 对话框并到activity 管理的fragments back stack 中,允许用户回到 该 dialog     

ListFragment

类似于ListActivity 的效果,并且还提供了ListActivity类似的onListItemCLick和setListAdapter等功能。内部维护一个ListView

使用布局android.R.layout.list_content

PreferenceFragments

类似于PreferenceActivity .可以创建类似PAD的设置界面AAAAAAAAA>

使用Fragment 1. xml中使用

<fragment
        class="com.stone.fragment.FragmentDemoActivity$TitlesFragment"   // 用成 android:name 也行
        android:id="@+id/titles"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="1"
        />
Fragment派生类 实现onCreateView() {inflater.inflate(... 将一个layout加入到fragment中) 返回View },

2. 使用代码添加Fragment

FragmentManagerfragmentManager = getFragmentManager(); //3.0以上在Activity中使AAAAAAAA>FragmentManagerfragmentManager = getSupportFragmentManager(); //使用V4包,应使用FragmentActivity

FragmentTransactionfragmentTransaction = fragmentManager.beginTransaction();

Fragment01dynamicFragment = new Fragment01()AAAAAAAA>fragmentTransaction.add(R.id.ll_frag_two,dynamicFragment); //有 layout---将fragment 加入到layout-ll_frag_two 中

fragmentTransaction.add(R.id.ll_frag_three,new Fragment01(),"kkk"); // “kkk” -----tagAAAAAAA>fragmentTransaction.add(dynamicFragment,"without_layout"); //无 layout

fragmentTransaction.commit();//  提交,每段事务 都需要begintransaction

fragmentManager.findFragmentById();

fragmentManager.findFragmentByTag("tag"); //无界面的可以用 tag作唯一标识取出

fragmentManager.popBackStack(); // 从activity的后退栈中弹出fragment(这可以模拟后退键引发的动作)。返回void

fragmentManager.addOnBackStackChangedListerner(); // 注册一个侦听器以监视后退栈的变化

fragmentManager.executePendingTransactions(); // 立即执行事务

fragmentTransaction.setTransition(transit); // 设置跳转动画

fragmentTransaction.addToBackStack("options name"); //将之前的操作加入后退栈中,这时按back键,弹出fragment,恢复到之前的状态

3. 事务的注意

    通过 add(),remove(), replace() 等 来操作 

警告:你只能在activity处于可保存状态的状态时,比如running中,onPause()方法和onStop()方法之前提交事务,否则会引发异常。这是因为fragment          

的状态会丢失。如果要在可能丢失状态的情况下提交事务,请使用commitAllowingStateLoss()。

4.  参数传递

与Activity交互,在 实现类中,getActivity();  // 得到其所在的activity

fragment间传参:fragment.setArguments(bundle);

5. Activity与Fragment共享事件

在Fragment中定义回调接口,Activity中传入。

回退栈的说明

fragmentTransaction.addToBackStack 和fragmentManager.popBackStack 的例子:

例1

ft.add(new asdf(),"frag1");

ft.addToBackStack("back1");

ft.commit();

ft =fm.beginTransaction(); ft.add(new asdff(),"frag2");

ft.commit(); //这时按back,弹出backStack中的 back1-frag1,再次按back,弹出frag2

例2

ft.add(new asdf(),"frag1");

ft.addToBackStack("back1");

ft.commit();

ft =fm.beginTransaction();

ft.add(new asdff(),"frag2");

ft.addToBackStack("back2");

ft.commit();//这时按back,先弹出back2,再按back,才弹出back1

例3

ft.add(new asdf(),"frag1");

ft.addToBackStack("back1");

ft.commit();

fm.popBackStack();//这里已经将back1弹出栈AAAAAAA > ft =fm.beginTransaction();

ft.add(new asdff(),"frag2");

ft.addToBackStack("back2");

ft.commit();// 这时按back,只弹出back2




android fragment相关问题

1、不要直接将Fragement写在XML文件里,这样会导致Fragment对象无法销毁,产生内存溢出。在代码动态的new 和add Fragement才是正确的做法。

2、使用抽屉方法,在XML文件里放两个LinearLayout,然后在代码中将Fragment加进这两个LinearLayout中。
要移动Fragment,就是移动LinearLayout,可以通过修改margin值来达到渐变移动的效果。
记得当Fragment移除屏幕的时候,detach掉它。
 
Android 怎给Fragment中的控件添加监听?

跟activity一样的设置
package com.huaao.fragment;

import android.app.Activity;
import AAAroid.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import AAAroid.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;

public class BtFragment extends Fragment implements OnClickListener {
private Button login;
private Button reg;

@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
Log.i("i"," Fragment 执行onAttach");

}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i("i"," Fragment 执行onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.i("i"," Fragment 执行onCreateView");
View view = inflater.inflate(R.layout.main1, null, false);
login = (Button) view.findViewById(R.id.login);
reg = (Button) view.findViewById(R.id.reg);
login.setOnClickListener(this);
reg.setOnClickListener(this);
return view;
}

@Override
public void onActivityCreated(Bundle savedInst......余下全文>>
 
http://www.bkjia.com/AAAroidjc/858031.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/858031.htmlTechArticleAndroid Fragment,androidfragment 生命周期: onAttach,onCreate,onCreateView,onActivityCreated,onStart,onResume, onPause,onStop,onDestroyView,onDestroyView,onDetach 三种类别...

本文源自: 环亚娱乐

相关文章Related Articles

如果您觉得本站还不错,就请分享给身边的好友吧


分享成功还有机会获得精美礼品哦