详解Android studio 动态fragment的用法

fragment的使用时Android的基础,它有两种用法,第一个就是静态的fragment。第二个则是动态的fragment。
静态fragment直接在layout创建你想要的fragment的XML的文件,然后在你的Java包里面创建对应fragment的class文件
布局代码如下所示

<?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="vertical">
 <TextView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="欢迎来到广西!"/>

</LinearLayout>

<?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.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".MainActivity">
 <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="去广西"
  android:id="@+id/bt_anjian1"/>
 <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="去广东"
  android:id="@+id/bt_anjian2"/>
 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  android:id="@+id/ll_rongqi"
  android:layout_weight="9">

 </LinearLayout>
 <fragment
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/fragment_1"/>

</LinearLayout>

*这里需要注意一下,如果你不给fragment加个id,那你运行app的时候将会发生闪退现象。

package com.example.anyone_fragment_2;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class Fragment_1 extends Fragment {

 @Nullable
 @Override

 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  View view=inflater.inflate(R.layout.fragment_1,container,false);
  return view;
 }
}

这样静态fragment算是弄好了,但是这次我们主要讨论动态fragment的用法

首先,我们先在activity_main中写下如下代码

<?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.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".MainActivity">
 <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="去广西"
  android:id="@+id/bt_anjian1"/>
 <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="去广东"
  android:id="@+id/bt_anjian2"/>
 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  android:id="@+id/ll_rongqi"
  android:layout_weight="9">

 </LinearLayout>

</LinearLayout>

布局效果图是这样的

这里fragment的XML文件和开头所说的静态fragment的那个XML文件的写法是一样的
同理,fragment对应的class文件也是相同的。

package com.example.anyone_fragment_2;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {//有abstract就闪退

 private Button bt_anjian1,bt_anjian2;
 private Fragment Fragment_1,Fragmentnow,Fragment_2;
 private FragmentManager fragmentManager;
 private FragmentTransaction fragmentTransaction;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  chushihua();
  shilihua();

 }
 private void chushihua()
 {
  bt_anjian1=findViewById(R.id.bt_anjian1);
  bt_anjian2=findViewById(R.id.bt_anjian2);
  bt_anjian1.setOnClickListener(this);
  bt_anjian2.setOnClickListener(this);
 }
 private void shilihua(){
  //用于实例化fragment
  Fragment_1=new Fragment_1();
  Fragment_2=new Fragment_2();
  Fragmentnow=Fragment_1;
  fragmentManager=getSupportFragmentManager();
  fragmentTransaction=fragmentManager.beginTransaction();
  //38:只要你要对fragment进行操作就少不了这句 原来的写法是FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
  fragmentTransaction.add(R.id.ll_rongqi,Fragment_1).commit();

 }
  public void onClick(View vv)
 {
  fragmentTransaction=fragmentManager.beginTransaction();
  switch (vv.getId())
  {
   case R.id.bt_anjian1:if (Fragment_1.isAdded())
   {
    fragmentTransaction.hide(Fragmentnow).show(Fragment_1).commit();
   }
   else
   {
    fragmentTransaction.hide(Fragmentnow).add(R.id.ll_rongqi,Fragment_1).commit();
   }
   Fragmentnow=Fragment_1;
    break;
   case R.id.bt_anjian2:if(Fragment_2.isAdded())
   {
    fragmentTransaction.hide(Fragmentnow).show(Fragment_2).commit();
   }
   else
   {
    fragmentTransaction.hide(Fragmentnow).add(R.id.ll_rongqi,Fragment_2).commit();
   }
   Fragmentnow=Fragment_2;
   break;

  }
 }
}

下面来分析一些地方
初始化功能函数

private void chushihua()
 {
  bt_anjian1=findViewById(R.id.bt_anjian1);
  bt_anjian2=findViewById(R.id.bt_anjian2);
  bt_anjian1.setOnClickListener(this);
  bt_anjian2.setOnClickListener(this);
 }

这样写的目的是让代码可读性更好,不至于很混乱。

其次就是实例化我们所写的fragment功能函数

private void shilihua(){
  //用于实例化fragment
  Fragment_1=new Fragment_1();
  Fragment_2=new Fragment_2();
  Fragmentnow=Fragment_1;
  fragmentManager=getSupportFragmentManager();
  fragmentTransaction=fragmentManager.beginTransaction();
  //38:只要你要对fragment进行操作就少不了这句 原来的写法是FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
  fragmentTransaction.add(R.id.ll_rongqi,Fragment_1).commit();

 }

其中的

FragmentManager fragmentManager;

这个是fragment和activity交互所要用到的。

fragmentManager=getSupportFragmentManager();

固定写法。

private FragmentTransaction fragmentTransaction;
 fragmentTransaction=fragmentManager.beginTransaction();

是调动fragment操作的API,也必不可少。

fragmentTransaction.add(R.id.ll_rongqi,Fragment_1).commit();

是添加fragment所用的语句,在这里就相当于是初始化吧。add(容器id,碎片对象),commit则是提交。

 public void onClick(View vv)
 {
  fragmentTransaction=fragmentManager.beginTransaction();
  switch (vv.getId())
  {
   case R.id.bt_anjian1:if (Fragment_1.isAdded())
   {
    fragmentTransaction.hide(Fragmentnow).show(Fragment_1).commit();
   }
   else
   {
    fragmentTransaction.hide(Fragmentnow).add(R.id.ll_rongqi,Fragment_1).commit();
   }
   Fragmentnow=Fragment_1;
    break;
   case R.id.bt_anjian2:if(Fragment_2.isAdded())
   {
    fragmentTransaction.hide(Fragmentnow).show(Fragment_2).commit();
   }
   else
   {
    fragmentTransaction.hide(Fragmentnow).add(R.id.ll_rongqi,Fragment_2).commit();
   }
   Fragmentnow=Fragment_2;
   break;

  }
 }

这里的onClick的名字是不能改变的,否则你button没办法触发。
用传来的形参View vv来获取到我们所点击的按钮来判断操作。
思想就是,如果Fragment存在,则只需要把它展示出来即可。isAdded嘛,ed过去式,那就是代表存在过咯。
若是没有,则添加就好。

好了,就到这吧,有错误的话希望能指出来,大家一起共同进步!

到此这篇关于详解Android studio 动态fragment的用法的文章就介绍到这了,更多相关Android studio fragment用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android Studio使用ViewPager+Fragment实现滑动菜单Tab效果

    本文为大家分享了Android Studio实现滑动菜单Tab效果的具体代码,供大家参考,具体内容如下 描述: 之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的: 最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发: APP已经完善了一部分,现在就想把已经做好的功能整理一下,记录下来. 效果图: 可以手动滑动菜单 也可以通过点击头部菜单进行切换 具体实现的代码: 前台代码(activity_main.xml): <?xml v

  • 详解Android studio 动态fragment的用法

    fragment的使用时Android的基础,它有两种用法,第一个就是静态的fragment.第二个则是动态的fragment. 静态fragment直接在layout创建你想要的fragment的XML的文件,然后在你的Java包里面创建对应fragment的class文件 布局代码如下所示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:

  • 详解Android studio实现语音转文字功能

    目录 一.在科大讯飞的官网上注册并下载SDK 二.配置安卓项目 三.运行效果展示 一.在科大讯飞的官网上注册并下载SDK 1.首先去讯飞开放平台申请一个账号(https://www.xfyun.cn/),然后点击“控制台”进入新的页面,创建一个应用,找到“语音听写”,下载相应的SDK. 文件解压后内容如下: 二.配置安卓项目 1.在android studio中新建一个空项目,将libs文件夹中的内容复制到安卓项目的libs文件夹下,其中msc.jar要右键添加Add As Library: 2

  • 实例详解Android Selector和Shape的用法

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和selector在美化控件中的作用是至关重要的. 1:Selector drawable的item中可以有以下属性: android:drawable="@[package:]drawable/drawable_resource" android:state_pressed=["

  • 详解Android Studio正式签名进行调试的实现步骤

    详解Android Studio正式签名进行调试的实现步骤 在Android Studio中,可以使用Gradle进行打包时自动签名.其实Android Studio默认会给调试应用加上Debug签名,但有时候调一些第三方SDK时,需要正式签名才能调起来,所以接下来分享一下使用Gradle自动签名的方法. 一.创建签名文件 打开AS,选择Build->Generate Signed APK,选择要打包的项目,点击Next,再点击Create new...创建签名文件 填写签名文件响应信息,如下所

  • 详解Android studio如何导入jar包方法

    下面我就总结一下Android studio大家在导入jar包时遇到的一些问题和解决方法: 1,首先先说一下怎么在AS 中找到sdk,jdk,ndk的安装路径,可能一部分人一开始找不到,下面贴出方法: Android studio 中更改sdk的路径,如下图,在右边红色方框中更改sdk的路径 还有一种更好的方式可以把sdk,jdk,ndk的路径全部找到,首先File---Other Settings---Default Project Structure...,打开如下图界面,从红方框处即可直接

  • 详解Android Studio中Git的配置及协同开发

    一. Android Stutio配置git setting–>Version Control–>Git–>Path to Git executable中选择git.exe的位置,这个Stutio一般会默认配置好: 配置完路径后点击后面的Test按钮,出现下面提示框则表示配置成功: 二. 将项目分享到github 1. 设置github账号密码 打开Setting–>Version Control–>GitHub,填写完账号密码后,点击Test测试,如果连接成功会弹出如下提示

  • 详解Android studio 3+版本apk安装失败问题

    studio2.3升级到3.1之后将apk发给别人下载到手机上安装,华为提示安装包无效或与操作系统不兼容,魅族提示apk仅为测试版,要求下载正式版安装. 在网上找了一下,发现是studio3.0之后的instant run功能引起的,直接点击绿色箭头按钮烧出来的apk都是不完整的,也就是魅族指的测试版,并且这个apk的路径在app\build\intermediates\instant-run-apk\debug下,而原来的app\build\outputs\apk\debug路径下已经没有ap

  • 详解Android Studio实现用户登陆界面demo(xml实现)

    使用Android Studio 编写的第一个demo,使用布局文件-xml实现用户登录界面 注:所建工程均为Android 6.0 所以只要是Android 6.0(包括6.0)以上的真机,模拟机都可以使用 Step1:Android Studio 开发环境的搭建: 1.安装JDK (1.8): 2.安装Android studio (3.3.1) 包含 gradle.sdk manage .avd manage : 3.使用sdk manage 下载安装 sdk: 4.使用avd manag

  • Android+OpenCV4.2.0环境配置详解(Android studio)

    仅是个人记录,希望能对有需要的给予一些小小的帮助 首先我们肯定是要去到OpenCV的官网下载对应的SDK,并解压得到文件夹(opencv-4.2.0-android-sdk) 其次是NDK环境搭建(双击shift,输入sdk,找到sdk manager,将下面红色框框勾选安装) 创建项目,我选用的是(并不是只有这一选择) 导入Module File->New->Import Module 路径选择**\opencv-4.2.0-android-sdk\OpenCV-android-sdk\sd

  • 详解Android ConstraintLayout 约束布局的用法

    前言 在2016年的Google I/O大会上 , Google 发布了Android Studio 2.2预览版,同时也发布了Android 新的布局方案 ConstraintLayout , 但是最近的一年也没有大规模的使用.2017年Google发布了 Android Studio 2.3 正式版,在 Android Studio 2.3 版本中新建的Module中默认的布局就是 ConstraintLayout .如下所示: <?xml version="1.0" enc

随机推荐