Fragment在FrameLayout

FrameLayout在添加Fragment时的应用 之前在用郭霖的《Android第一行代码》学习布局的时候,觉得FrameLayout是一个神奇的布局:“这种布局没有任何的定位方式,所有控件都会摆放在布局的左上角”。 当时实在无法想象这种布局是有什么用。 直到今天,打算在同一个活动里通过点击按键添加碎片,实现整个屏幕背景的切换——后一个占据整屏的碎片添加进来替换前一个整屏的碎片。于是在activity_main中编写如下代码: <?xml vers 阅读详情

Fragment

  • API11(Android3.0)中引入了Fragment,由FragmentManager来管理。
  • Fragment extends object 。
  • Fragment也是Activity中的一个普通控件而已,只不过它可以像Activity一样用于显示的同时还能用来盛装其它控件,并且有类似Activity的lifecycle。
  • 可被多个Acitivity重用, 在Acitivity运行中动态地移除、加入、交换等。
  • 兼容API11(Android3.0)以前版本使用 v4.app.Fragment,Acitivity需要继承AppCompatActivity,通过getSupportFragmentManager() 获得v4.app.FragmentManager 。
  • API11(Android3.0)以后可使用 app.Fragment,通过getFragmentManager()获得app.FragmentManager 。

生命周期lifecycle

  • 类似Acitivty,但是由Activity管理,由许多不同点。
    这里写图片描述

简单添加到Activity方法

 private void add() {
        OneFragment oneFragment = OneFragment.newInstance("");
        FragmentTransaction transaction = mManager.beginTransaction();
        transaction.add(R.id.fl_container, oneFragment, "one");
        transaction.commit();
    }
  • 将Fragment添加到Activity中,并生效。
  • 重要的类有FragmentManager 和FragmentTransaction,在下面详细分析。

Fragment相关的类及其方法

FragmentManager
  • FragmentManager是一个抽象类, getFragmentManager()获取的是FragmentManagerImpl ,是一个实现类
//调用层级 最后是FragmentManagerImpl 
getFragmentManager()  
  -->FragmentController(Fragment's lifecycle)
  -->getFragmentManagerImpl()
  -->FragmentHostCallback 
  -->final FragmentManagerImpl mFragmentManager = new FragmentManagerImpl();
  • FragmentManager.java中 定义FragmentManager /FragmentManagerImpl / FragmentManagerState三个类/接口

  • beginTransaction() 获得FragmentTransaction,FragmentManagerImpl 中的Override的beginTransaction()

 @Override
    public FragmentTransaction beginTransaction() {
        return new BackStackRecord(this);
    }
  • findFragmentById(@IdRes int id) 相同id ,取第一个找到的,一般就是最上面的。
  • findFragmentByTag(String tag) 相同tag,取第一个找到的,一般就是最上面的。
  • getFragments() 返回ArrayList< Fragment > mActive; 可能存在null
  • 持有一个BackStackRecord的列表 ArrayList< BackStackRecord > mBackStackIndices
FragmentTransaction
  • add 和 replace 影响的只是界面,而控制回退的,是事务

  • FragmentTransaction 是一个抽象类, beginTransaction()获取的是BackStackRecord,是一个实现类

  • BackStackRecord extends FragmentTransaction

  • add 和 replace 影响的只是界面,而控制回退的是事务,add 和 replace最后调用addOp(Op op)
  • addOp(Op op) 添加到队列mOps中,通过commit才会提交

    void addOp(Op op) {
          mOps.add(op);
          op.enterAnim = mEnterAnim;
          op.exitAnim = mExitAnim;
          op.popEnterAnim = mPopEnterAnim;
          op.popExitAnim = mPopExitAnim;
      }
  • addToBackStack(将事务添加到回退栈里)

    @Override
      public FragmentTransaction addToBackStack(String name) {
          if (!mAllowAddToBackStack) {
              throw new IllegalStateException(
                      "This FragmentTransaction is not allowed to be added to the back stack.");
          }
          mAddToBackStack = true;
          mName = name;
          return this;
      }
  • commit (提交到处理队列里,默认不会添加到回退栈,默认等待执行),调用commitInternal(false)

    int commitInternal(boolean allowStateLoss) {
          if (mCommitted) throw new IllegalStateException("commit already called");
          if (FragmentManagerImpl.DEBUG) {
              Log.v(TAG, "Commit: " + this);
              LogWriter logw = new LogWriter(TAG);
              PrintWriter pw = new PrintWriter(logw);
              dump("  ", null, pw, null);
              pw.close();
          }
          mCommitted = true;
          if (mAddToBackStack) {
              mIndex = mManager.allocBackStackIndex(this);
          } else {
              mIndex = -1;
          }
          mManager.enqueueAction(this, allowStateLoss);
          return mIndex;
      }
add
  • add(@IdRes int containerViewId, Fragment fragment)
  • 可能出现 Fragment already added 错误,原因:add 已经add的fragment(hashcode一样)
  • lifecycle方法调用情况
10-23 17:01:58.737 13673-13673/com.wega.android E/Frag+Frame: OneFragment==null==OneFragment
10-23 17:01:58.743 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onAttach
10-23 17:01:58.744 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onCreate
10-23 17:01:58.744 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onCreateView
10-23 17:01:58.753 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onActivityCreated
10-23 17:01:58.753 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onStart
10-23 17:01:58.753 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onResume
  • 在add 前 需要new Fragment() ,但是new不会调起Framgent生命周期动作如:oncreate ,而 Acitivty不需要我们new的,是由系统创建的.
remove
  • remove(Fragment fragment)
  • Remove an existing fragment
  • 先获得已存在fragment才能remove 不能传空值
  • 通过findFragmentById() findFragmentByTag()获得已存在fragment
  • lifecycle方法调用情况
10-23 17:02:55.873 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onPause
10-23 17:02:55.874 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onStop
10-23 17:02:55.874 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onDestroyView
10-23 17:02:55.874 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onDestroy
10-23 17:02:55.874 13673-13673/com.wega.android E/Frag+Frame: OneFragment==0==onDetach
replace
  • replace(@IdRes int containerViewId, Fragment fragment)
  • 不能传空值
  • 先remove掉相同id的所有fragment,然后在add当前的这个fragment
  • add 和 remove 结合
  • lifecycle方法调用情况
10-23 17:07:11.092 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==OneFragment
10-23 17:07:11.098 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onAttach
10-23 17:07:11.098 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onCreate
10-23 17:07:11.099 24280-24280/com.wega.android E/Frag+Frame: OneFragment==0==onPause
10-23 17:07:11.099 24280-24280/com.wega.android E/Frag+Frame: OneFragment==0==onStop
10-23 17:07:11.099 24280-24280/com.wega.android E/Frag+Frame: OneFragment==0==onDestroyView
10-23 17:07:11.099 24280-24280/com.wega.android E/Frag+Frame: OneFragment==0==onDestroy
10-23 17:07:11.099 24280-24280/com.wega.android E/Frag+Frame: OneFragment==0==onDetach
10-23 17:07:11.099 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onCreateView
10-23 17:07:11.099 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onActivityCreated
10-23 17:07:11.100 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onStart
10-23 17:07:11.100 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onResume
hide
  • hide(Fragment fragment)
  • 与show一起作用
  • hide 已经添加的fragment 不能传空值
  • hide fragment 不会调用生命周期
show
  • show(Fragment fragment)
  • 与hide一起作用
  • This is only relevant for fragments whose views have been added to a container
  • show已经hide的fragment
  • show fragment 不会调用生命周期
detach
  • detach(Fragment fragment)
  • 与attach一起作用
  • 不能传空值
  • lifecycle方法调用情况
10-23 17:07:41.687 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onPause
10-23 17:07:41.687 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onStop
10-23 17:07:41.687 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onDestroyView
attach

-attach(Fragment fragment)
- 与detach一起作用
- 不能传空值
- lifecycle方法调用情况

10-23 17:07:56.420 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onCreateView
10-23 17:07:56.420 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onActivityCreated
10-23 17:07:56.421 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onStart
10-23 17:07:56.421 24280-24280/com.wega.android E/Frag+Frame: OneFragment==null==onResume

重建 切屏

  • Fragment也有onSaveInstanceState的方法,在此方法中进行保存数据,然后在onCreate或者onCreateView或者onActivityCreated进行恢复都可以。
 @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putString("name", "save");
        super.onSaveInstanceState(outState);

        Log.e("Activity", TAG +"=="+mTag1+"=="+"onSaveInstanceState"+"=="+outState.getString("name"));
    }
 @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(savedInstanceState!=null)
        {
            Log.e("Activity", TAG +"=="+mTag1+"=="+"onCreate"+"=="+savedInstanceState.getString("name"));
        }
        Bundle arguments = getArguments();
        if(arguments!=null)
        {
            mTag1 = arguments.getString("tag");
        }
        Log.e("Activity", TAG +"=="+mTag1+"=="+"onCreate");
    }

demo源码

FragmentActivity
package com.wega.android.fragment;

import android.content.DialogInterface;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import com.wega.android.R;

import java.util.List;

public class FragmentActivity extends AppCompatActivity implements View.OnClickListener {

    private String LOG_TAG="Frag+Frame";

    private FragmentManager mManager;
    private OneFragment mOneFragment;
    private String TAG;
    private int num;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);
        mManager = getSupportFragmentManager();
        TAG = this.getClass().getSimpleName();
        if (savedInstanceState == null) {
            Log.e(LOG_TAG, TAG + "==onCreate");
        } else {

            String name = savedInstanceState.getString("name");
            Log.e(LOG_TAG, TAG + "==onCreate==name==" + name);
        }
        findViewById(R.id.add).setOnClickListener(this);
        findViewById(R.id.remove).setOnClickListener(this);
        findViewById(R.id.replace).setOnClickListener(this);
        findViewById(R.id.log).setOnClickListener(this);
        findViewById(R.id.show).setOnClickListener(this);
        findViewById(R.id.hide).setOnClickListener(this);
        findViewById(R.id.attach).setOnClickListener(this);
        findViewById(R.id.detach).setOnClickListener(this);
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.add:
                add();
                break;
            case R.id.remove:
                remove();
                break;
            case R.id.replace:
                replace();
                break;
            case R.id.show:
                show();
                break;
            case R.id.hide:
                hide();
                break;
            case R.id.log:
                getFragmentList();
                break;
            case R.id.attach:
                attach();
                break;
            case R.id.detach:
                detach();
                break;
        }
    }



    private void add() {

        OneFragment oneFragment = OneFragment.newInstance("" + num++);
        FragmentTransaction transaction = mManager.beginTransaction();
        transaction.add(R.id.fl_container, oneFragment, "one");
        transaction.commit();
    }


    private void remove(){
        Fragment fragmentById = mManager.findFragmentById(R.id.fl_container);
        FragmentTransaction transaction = mManager.beginTransaction();
        if(fragmentById!=null)
        {
            transaction.remove(fragmentById);
        }
        transaction.commit();
    }


    private void replace() {

        if (mOneFragment == null) {
            mOneFragment = new OneFragment();
        }
        FragmentTransaction transaction = mManager.beginTransaction();
        transaction.replace(R.id.fl_container, mOneFragment);
        transaction.commit();

    }


    private void show() {
        Fragment fragmentById = mManager.findFragmentById(R.id.fl_container);
        FragmentTransaction transaction = mManager.beginTransaction();
        transaction.show(fragmentById);
        transaction.commit();
    }


    private void hide() {
        Fragment fragmentById = mManager.findFragmentById(R.id.fl_container);
        FragmentTransaction transaction = mManager.beginTransaction();
        transaction.hide(fragmentById);
        transaction.commit();
    }

    private void attach() {
        Fragment fragmentById = mManager.findFragmentById(R.id.fl_container);
        FragmentTransaction transaction = mManager.beginTransaction();
        transaction.attach(fragmentById);
        transaction.commit();
    }

    private void detach() {
        Fragment fragmentById = mManager.findFragmentById(R.id.fl_container);
        FragmentTransaction transaction = mManager.beginTransaction();
        transaction.detach(fragmentById);
        transaction.commit();
    }

    private void getFragmentList() {
        Fragment fragment = mManager.findFragmentById(R.id.fl_container);
        Fragment fragment1 = mManager.findFragmentByTag("one");
        if (fragment != null) {
            Log.e("fragment", "findFragmentById=" + fragment.toString());
        }

        if (fragment1 != null) {
            Log.e("fragments1", "findFragmentByTag=" + fragment1.toString());
        }

        List<Fragment> fragments = mManager.getFragments();
        if (fragments == null) {
            return;
        }

        for (int i = 0; i < fragments.size(); i++) {

            if (fragments.get(i) == null) {
                Log.e("fragments", "null");
            } else {
                Log.e("fragments", fragments.get(i).toString());
            }

        }
        Log.e("fragments", "==========");

    }

}
OneFragment
package com.wega.android.fragment;


import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.wega.android.R;


/**
 * A simple {@link Fragment} subclass.
 */
public class OneFragment extends Fragment {


    private String TAG;
    private String LOG_TAG="Frag+Frame";
    private String mTag1;

    public OneFragment() {
        TAG =this.getClass().getSimpleName();
        Bundle arguments = getArguments();
        if(arguments!=null)
        {
            mTag1 = arguments.getString("tag");
        }
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"OneFragment");
    }

    public static OneFragment newInstance(String tag) {

        Bundle args = new Bundle();
        args.putString("tag",tag);
        OneFragment fragment = new OneFragment();
        fragment.setArguments(args);
        return fragment;
    }




    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        Bundle arguments = getArguments();
        if(arguments!=null)
        {
            mTag1 = arguments.getString("tag");
        }
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onAttach");
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(savedInstanceState!=null)
        {
            Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onCreate"+"=="+savedInstanceState.getString("name"));
        }
        Bundle arguments = getArguments();
        if(arguments!=null)
        {
            mTag1 = arguments.getString("tag");
        }
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onCreate");

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        TAG =this.getClass().getSimpleName();
        Bundle arguments = getArguments();
        if(arguments!=null)
        {
            mTag1 = arguments.getString("tag");
        }
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onCreateView");
        View inflate = inflater.inflate(R.layout.fragment_one, container, false);
        TextView viewById = (TextView) inflate.findViewById(R.id.tv_hashcode);
        viewById.setText(this.toString()+"tag=="+mTag1);
        return inflate;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onActivityCreated");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onResume");
    }


    @Override
    public void onPause() {
        super.onPause();
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onStop");
    }


    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onDestroy");
    }


    @Override
    public void onDetach() {
        super.onDetach();
        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onDetach");
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putString("name", "save");
        super.onSaveInstanceState(outState);

        Log.e(LOG_TAG, TAG +"=="+mTag1+"=="+"onSaveInstanceState"+"=="+outState.getString("name"));
    }



}

demo源码地址

github demo源码地址:https://github.com/LinweiJ/Android

backStack

未完待续

将一个fragment加载到activity(使用framelayout的方法) 第一步:first_fragment.xml: 作为fragment的布局,使用一个textview。 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="ve... 阅读详情

相关推荐

Kotlin实现动态添加Fragment碎片到FrameLayout布局中

Android中使用kotlin语言进行实现动态的Fragement碎片添加到布局中 前面有一章(http://blog.youkuaiyun.com/mysupergirl/article/details/72677423)介绍过kotlin实现Activity之间的跳转和控件的获取,本章介绍kotlin实现碎片的添加 效果图: 创建主布局 activity_view_pager.xml <?xml ve

MySuperGirl的博客 3996

Fragment系列:使用FrameLayout动态加载

继续把动态加载也写完。

知道这个有什么用? 2851

芯片良率提升:从设计到制造的系统性工程实践

在半导体制造领域,良率是衡量生产效率和成本控制的核心指标,直接关系到芯片的经济效益与市场竞争力。其本质是合格芯片占总产出芯片的百分比,提升良率需要从设计源头到制造末端的全流程协同优化。从技术原理看,它涉及可制造性设计、工艺过程控制、缺陷检测与根因分析等多个复杂环节,尤其在先进制程下,随机缺陷和参数变异成为主要挑战。其技术价值不仅在于降低单颗芯片成本,更能加速产品上市、保障可靠性,并成为企业技术实力的关键体现。应用场景贯穿智能手机、数据中心、自动驾驶和人工智能等所有高端芯片领域。本文将结合【芯片制造】与【良率

weixin_42526068的博客 634

FrameLayout 加载 fragment

1.布局<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.andro

xw_414的博客 597

【NLP】语言模型的发展历程 (1)

N-gram模型是一种基于统计语言模型的文本分析算法,它用于预测文本中下一个词出现的概率,基于前面出现的n-1个词的序列。这里的n代表序列中元素的数量,因此称为N-gram。Unigram:N=1,每个单词的出现概率独立计算,不考虑上下文。Bigram:N=2,基于前一个单词预测当前单词的联合概率模型。Trigram:N=3,考虑前两个单词来预测当前单词的联合概率模型,更复杂但可能更准确。

酒酿小圆子呀~ 1668

森林冰火人html源码,森林冰火人单人版(源码)

【实例简介】java小游戏——森林冰火人,单人游戏, 实现人物行走,跳跃,吃水晶,具有计时功能,积分功能,倒计时结束游戏失败。【实例截图】【核心代码】森林冰火人单人版├── bin│ ├── game│ │ ├── Help.class│ │ ├── Logon.class│ │ ├── Main.class│ │ ├── Mykey.class│ │ ...

weixin_42507981的博客 6201

Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果

加载单个fragment效果 头部标题多个fragment 底部标题按钮多个fragment ...

meixi_android的博客 3485

WGCNA分析中那些没人告诉你的坑:以肺结核差异基因模块筛选为例

本文深入探讨WGCNA分析在肺结核差异基因模块筛选中的七个关键陷阱,包括soft-thresholding选取、样本离群值检测、模块合并阈值调整等。通过实际案例和R代码示例,揭示生信数据挖掘中常被忽视的技术细节,帮助研究者避免常见错误,提升分析结果的可靠性和生物学意义。

weixin_29218509的博客 261

Fragment动态加载案例

在Activity中动态加载Fragment步骤(1)、创建一个Fragment对象(2)、获取FragmentManager的实例(3)、开启FragmentTransaction事务(4)、向Activity的布局器(一般为FrameLayout)中添加Fragment(5)、通过commit()方法提交事务案例:简易的点菜界面效果图: activity_main: 右边的菜列表 FoodFragment代码: food_menu: food_item:

A125679880的博客 2316

Mamba-YOLO实战:环境配置+模型训练+精度调优全流程指南(附Colab代码)

在目标检测领域,一场由状态空间模型引发的技术革新正在悄然改写行业格局。近期国际顶级学术期刊连续发布的YOLOv5_mamba、FER-YOLO等突破性成果,不仅刷新了检测精度记录,更开创了结构化状态空间模型(SSM)与经典检测框架的创新融合范式。当前该领域涌现的十大标杆性研究,已在以下维度取得突破性进展:√ 遮挡目标识别准确率提升38%√ 小样本场景泛化能力增强2.7倍√ 视频流检测延迟降低至17ms√ 多目标交叉干扰抑制效果达SOTA。

2501_90555291的博客 1582

Python遥感图像处理应用篇(二十三):Python+GDAL 批量拼接图像

遥感影像拼接分多种不同的情况,比如比较常用的是两幅影像拼接或者多个图像合并为一个图像。GDAL中实现影像拼接的方式也有多种,比如常用可以通过numpy读取影像数组,并计算各个图像的numpy数组范围,合并多个numpy数组为一个最终的结果,并将其重新输出为一幅新的图像,即可实现图像的拼接。另外比较方便的一种方法便是使用GDAL.warp()函数方法。这个函数的功能很多,可以实现多种不同的目的,比如用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、矢量裁剪等多种功能。这些功能可以通过设置Op

soderayer的博客 4643

Android使用帧布局(FrameLayout)来动态加载碎片(fragment)

1、在activity_main.xml布局上添加帧布局FrameLayout&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pa...

美奇软件开发工作室 7849

VSCode 中搭建 Python 开发环境

**验证安装**:打开终端(CMD/PowerShell/终端),输入 `python --version`(Windows)或 `python3 --version`(macOS/Linux),显示版本号即成功。- **下载地址**:[Python 官网](https://www.python.org/downloads/)(选择对应系统的最新稳定版,推荐 3.8+)- **调试**:通过 `launch.json` 配置,设置断点后按 `F5` 启动,使用 `F10/F11` 控制流程。

寒寒豆豆软件公司的博客 2537

关于xml布局中Fragment与 FrameLayout的理解

xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/main"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="horizontal"    

sinat_20476061的专栏 6777

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

FrameLayout动态绑定Fragment

只是为了弥补没有在帧布局上面没有动态板顶Fragment这一个缺憾,简单的配置了一个demo Fragment的布局都是非常简单,只有一个TextView,这里就不贴不来了 然后Fragment.class中链接布局文件 View view = inflater.inflate(R.layout.first_fragment,container,false); 然后就是主函数中进行绑定设置!代码如...

Autumn_leavess的博客 1750

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android fragment framelayout,FrameLayout和Fragment处理Android应用UI布局实例

易采站长站为您分析FrameLayout和Fragment处理Android应用UI布局实例,安卓3.0以后Fragment的出现为多尺寸屏幕的适配带来了方便,需要的朋友可以参考下将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment :1.由于用到getSupportFragmentManager()之类,所以主Acti...

weixin_42109732的博客 433

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

FrameLayout占位与fragment页面联动

&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;amp;gt; &amp;amp;lt;FrameLayout android:id=&amp;quot;@+id/fl&amp;quot; android:layout_width=&amp;quot;match_parent

weixin_44210659的博客 681

android fragment framelayout,Android布局中FrameLayout和fragment中的使用。

我在看《第一行代码》中的碎片部分,对其中的这部分代码没有办法理解android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal">android:id="@+id/left_fragment"android:name="com.example.qiao...

weixin_42522131的博客 633

android 获取xml布局中的framelayout,关于xml布局中Fragment与 FrameLayout的理解

xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"tools:context=".ActionTab_Act...

weixin_28842367的博客 727

关于Fragment中出现的FrameLayout的理解

在用Android Studio时,新建项目选择空的Fragment Activity,刚建好的项目里有两个xml文件,其中Activity_main.xml中只有一个FrameLayout布局,这个布局是一个容器,用于装载各个Fragment的xml布局文件!! 想要FrameLayout中的内容,只要使用FragmentManager的方法replace(R.id.container,new

ZzzDeIU的技术笔记 1705

Fragment+FrameLayout实现Tab切换

壮飞的博客 6064

Fragment正确使用以及FrameLayout的结合使用

Fragment正确使用以及FrameLayout的结合使用,正确的保存Fragment的状态及状态恢复1:Fragment几个重要的生命周期方法(关联Fragment状态只介绍这几个重要的生命周期) private View root; @Override public View onCreateView(LayoutInflater inflater, ViewGroup c

u012216274的博客 1万+

android framelayout布局属性,Android布局中FrameLayout和fragment中的使用。

我在看《第一行代码》中的碎片部分,对其中的这部分代码没有办法理解<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout...

weixin_34175978的博客 808

android fragment加载布局的方式,Android布局中FrameLayout和fragment中的使用。

我在看《第一行代码》中的碎片部分,对其中的这部分代码没有办法理解android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal">android:id="@+id/left_fragment"android:name="com.example.qiao...

bobo的博客 993

FrameLayout 加载 Fragment

一、mainActivity写布局----底部按钮。 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-...

xw_414的博客 9068
上一篇: Activity分析
下一篇: 去掉API21(5.0) Button自带点击阴影
LinWeiJ
博客等级 码龄10年 29粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值