Android Fragement 界面碎片

Fragement




关于两个不同的包 app&support.v4

  1. android.app.Fragment: 3.0版本或以上 getFragmentManager()
  2. android.support.v4.app.Fragment: 1.6版本或以上 getSupportFragmentManager() (Activity必须继承FragmentActivity)




Fragement

package com.bz.fragement;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;

public class fragement_My extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragement_my, null);

        final EditText edtmedo = (EditText) view.findViewById(R.id.edtmedo);
        Button btnmedo = (Button) view.findViewById(R.id.btnmedo);

        btnmedo.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                do_fragement fragmentdo = (fragement_do) getActivity().getSupportFragmentManager().findFragmentByTag("F_DO");
                fragmentdo.Settxtdotext(edtmedo.getText().toString());
            }
        });

        return view;
    }
}

在Activity中使用

FragmentManager fragmentManager = getSupportFragmentManager(); //得到碎片管理者
FragmentTransaction transaction = fragmentManager.beginTransaction(); //获取开启碎片事务
transaction.replace(R.id.RLayoutFme, new fragement_My(), "F_MY");
transaction.addToBackStack(null); //将此Fragment添加到后台堆栈, 不可见时不会销毁,重复使用时大大优化
transaction.commit(); //提交事务  ***记得***




一些函数

Fragement的一些函数

  1. void setArguments(Bundle args);  这个函数为Fragment提供构造参数(也就是数据),参数以Bundle类型封装。因为官方不建议把数据的传递提供写在构造函数当中,因此提供了这个方法。
  2. Bundle getArguments();  通过这个函数可以获取到传递给Fragment的参数。可以再Fragment当中直接调用,获取传递的数据。
  3. FragmentActivity getActivity();  返回和当前Fragment关联的FragmentAcitivty对象。
  4. FragmentManager getChildFragmentManager();  返回内嵌在当前Fragment当中的FragmentManager,用于管理内嵌在当前的Fragment的Fragments。
  5. FragmentManager getFragmentManager();  返回和当前Fragment平行的FragmentManager,用于管理和当前Fragment平行的Fragments。
  6. Fragment getParentFragment ();  返回包含当前Fragment的父Fragment。
  7. void onDestroyView();  当视图和Fragment分离的时候调用。进入后台堆栈或接着直接销毁onDestroy()
  8. void onDestroy();  当Fragment不再使用的时候调用。
  9. void onAttach(); 在onCreate()之前,一般是给Fragment添加回调接口

FragmentManager的一些函数

  1. void addOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener listener);  为Fragment的后台堆栈添加一个监听器,用于监听堆栈的改变情况。
  2. FragmentTransaction beginTransaction();  开启一个事务,用于Fragment的一系列处理。
  3. Fragment findFragmentById(int id);  通过Fragment的ID找到Fragment,这个ID可以是XML中的也可以是通过事务动态添加进去的。
  4. Fragment findFragmentByTag(String tag);  通过Fragment的Tag找到Fragment,这个Tag可以是XML中的也可以是通过事务动态添加进去的。
  5. FragmentManager.BackStackEntry getBackStackEntryAt(int index);  根据序号返回后台堆栈中的BackStackEntry对象,最底的序号为0。
  6. int getBackStackEntryCount();  返回堆栈的总数目。
  7. void popBackStack();  弹出堆栈中的一个并且显示,也就是代码模拟按下返回键的操作。
  8. void popBackStack(String name, int flags); 针对第一个参数,如果name为null,那么只有顶部的状态被弹出;如果name不为null,并且找到了这个name所指向的Fragment对象;根据flags的值,如果是flag=0,那么将会弹出该状态以上的所有状态;如果flag=POP_BACK_STACK_INCLUSIVE,那么将会弹出该状态(包括该状态)以上的所有状态。
  9. void popBackStack(int id, int flags);  针对第一个参数,如果该id找不到,那么什么都不做;否则根据flags的值,如果是flag=0,那么将会弹出该状态以上的所有状态;如果flag=POP_BACK_STACK_INCLUSIVE,那么将会弹出该状态(包括该状态)以上的所有状态。
  10. boolean popBackStackImmediate (int id, int flags);  和popBackStack(int id, int flags)类似,不同的是这个事立马弹出,和executePendingTransactions()方法之后的效果一样。如果有东西弹出,返回为true;否则就是false。
  11. boolean popBackStackImmediate (String name, int flags);  和popBackStack(String name, int flags)类似,不同的是这个事立马弹出,和executePendingTransactions()方法之后的效果一样。如果有东西弹出,返回为true;否则就是false。
  12. boolean popBackStackImmediate();  与popBackStack()方法类似,其他参考上面两个。
  13. void removeOnBackStackChangedListener (FragmentManager.OnBackStackChangedListener listener);  移除监听堆栈的监听器。

FragmentTransaction的一些函数

  1. FragmentTransaction add(Fragment fragment, String tag);  通过调用add(int, Fragment, String)方法,传入containerViewId为0。
  2. FragmentTransaction add(int containerViewId, Fragment fragment);  通过调用add(int, Fragment, String)方法,传入tag为null。
  3. FragmentTransaction add(int containerViewId, Fragment fragment, String tag);  添加一个Fragment到Activity中。
  4. FragmentTransaction addToBackStack(String name);  添加这个Fragment到后台堆栈中。
  5. FragmentTransaction attach(Fragment fragment);  在fragment detach之后再次绑定到视图当中。
  6. int commit();  提交事务,后台执行事务的操作。
  7. int commitAllowingStateLoss();  和commit()差不多,但是在Activity状态保存了之后执行commit()。
  8. FragmentTransaction detach(Fragment fragment);  从UI中解除Fragment的绑定。
  9. FragmentTransaction remove(Fragment fragment);  移除一个已经存在了的Fragment。
  10. FragmentTransaction replace(int containerViewId, Fragment fragment, String tag);  替换一个已经存在了的Fragment(先remove,在add)。
  11. FragmentTransaction replace(int containerViewId, Fragment fragment);  调用replace(int containerViewId, Fragment fragment, String tag),但是tag为null。
  12. FragmentTransaction setCustomAnimations(int enter, int exit, int popEnter, int popExit);  设置进入/退出的动画效果(资源文件)。这个必须位于replace、add、remove之前,否则效果不起作用。四个参数分别表示:添加、移除、从Backstack中pop出来、进入的动画效果。
  13. FragmentTransaction setCustomAnimations(int enter, int exit);  设置进入退出的动画效果。
  14. FragmentTransaction setTransition(int transit);  设置切换效果。目前API提供:TRANSIT_NONE、 TRANSIT_FRAGMENT_OPEN、TRANSIT_FRAGMENT_CLOSE三种。
  15. FragmentTransaction setTransitionStyle(int transit);  设置切换的风格。
  16. FragmentTransaction hide(Fragment fragment);  隐藏一个存在的Fragment。
  17. FragmentTransaction show(Fragment fragment);  显示一个之前隐藏的Fragment。










FragmentTabHost

XML

tabcontent:要切换成Fragment的位置

<FrameLayout
    android:id="@+id/tabcontent"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="12" />
<android.support.v4.app.FragmentTabHost
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
</android.support.v4.app.FragmentTabHost>

src

Fragment的onCreateView的inflate的attachToRoot参数 应为false

public class MainActivity extends FragmentActivity {

    private FragmentTabHost TabHost;
    private Class<?>[] fragments;
    private String[] TagStrings;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
        initData();
    }

    private void initData() {
        TagStrings = getResources().getStringArray(R.array.tag); // 获取Tag数组
        fragments = new Class<?>[] { lately_fragment.class, think_fragment.class, thing_fragment.class, tool_fragment.class }; // 创建Fragment数组


        TabHost.setup(this, getSupportFragmentManager(), R.id.tabcontent); //设置上下文、管理者、要切换的
        TabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { //添加FragmentTabHost改变时的监听器
            @Override
            public void onTabChanged(String tabId) { //tabId:当前tab的标题
            }
        });

        for (int i = 0; i < TagStrings.length; i++) { // 添加tab的视图和指示器
            TabSpec tag = TabHost.newTabSpec(TagStrings[i]).setIndicator(getTabItemView(i));
            TabHost.addTab(tag, fragments[i], null);
            // TabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.bg); // --背景图片
        }
    }

    /**
     * 绘制 Tab
     * @param index 绘制第几个
     */
    private View getTabItemView(int index) {
        TextView tView = new TextView(getApplicationContext());
        tView.setText(TagStrings[index]);
        tView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 25); // 设置25SP
        tView.setGravity(BIND_AUTO_CREATE);
        tView.setMinimumWidth(75);
        return tView;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值