android studio 导入包分不分动态静态,详解Android studio 动态fragment的用法
fragment的使用时Android的基础,它有两种用法,第一个就是静态的fragment。第二个则是动态的fragment。
静态fragment直接在layout创建你想要的fragment的XML的文件,然后在你的Java包里面创建对应fragment的class文件
布局代码如下所示
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="欢迎来到广西!"/>
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">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="去广西"
android:id="@+id/bt_anjian1"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="去广东"
android:id="@+id/bt_anjian2"/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/ll_rongqi"
android:layout_weight="9">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fragment_1"/>
*这里需要注意一下,如果你不给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中写下如下代码
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">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="去广西"
android:id="@+id/bt_anjian1"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="去广东"
android:id="@+id/bt_anjian2"/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/ll_rongqi"
android:layout_weight="9">
布局效果图是这样的
这里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用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
android studio 导入包分不分动态静态,详解Android studio 动态fragment的用法相关推荐
- 关于android的4.2的0文件夹的详解
关于android的4.2的0文件夹的详解 ---- android 4.0 ---- 在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd ...
- android 4.2目录结构,关于android的4.2的0文件夹的详解(目录结构挂载分析)
关于android的4.2的0文件夹的详解 ---- android 4.0 ---- 在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd ...
- AutoCAD .Net二次开发之JIG动态绘制详解
AutoCAD .Net二次开发之JIG动态绘制详解 AutoCAD平台动态绘制分两种,单实体绘制EntityJig和多实体绘制DrawJig,需要自己自定义类去继承.(本人的理解全放在了代码注释中, ...
- Android异步处理三:Handler+Looper+MessageQueue深入详解
本博文地址:http://blog.csdn.net/mylzc/article/details/6771331 转载请注明出处 Android异步处理系列文章索引 Android异步处理一:使用Th ...
- 视频教程-Android Studio 开发详解-Android
Android Studio 开发详解 1999年开始从事开发工作,具备十余年的开发.管理和培训经验. 在无线通信.Android.iOS.HTML5.游戏开发.JavaME.JavaEE.Linux ...
- Android 动态分区详解(一) 5 张图让你搞懂动态分区原理
文章目录 0. 导读 1. 动态分区详解的背景 1.1 背景 1.2 动态分区的本质 2. Linux device mapper 驱动 3. Android 动态分区布局 3.1 动态分区布局 3. ...
- 生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解
学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类pa ...
- Android 动态分区详解(六) 动态分区的底层机制
文章目录 1. Android 动态分区的两重含义 2. device mapper 的原理 3. linear 映射的原理 3.1 多个设备映射示例 3.2 `dmsetup create` 命令参 ...
- android代码查找快捷键是什么,Android Studio搜索功能(查找功能)及快捷键图文详解(示例代码)...
1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置 2.在当前工程内查找文本[Ctrl+Shift+F] 先会弹出一个对话框,直接点击[fi ...
最新文章
- 云解析DNS产品优势与应用场景
- python---基础知识回顾(五)(python2.7和python3.5中的编码)
- Storm中的LocalState 代码解析
- sscanf的高级用法
- php yii 海报,php – 找不到Yii2主题集成图像
- 为啥加班多太多对身体会造成影响,不干活就不会对身体造成影响么?
- [Ubuntu] zsh
- python获取视频缩略图_Python代码生成视频的缩略图的实例讲解
- 12.10上海交大PMP试题每日一题
- 微软私有云服务器,微软发布私有云解决方案及数据平台
- 电脑(笔记本/台式)如何关闭UAC
- 生物信息学分析选用的服务器,蛋白质与蛋白质组分析生物信息学
- 主流手机CPU及机型介绍!手机CPU生产厂商介绍!高通QSD8250、MSM8255、TI OMAP 3630、nVIDIA Tegra 2介绍
- Error: GPG check FAILED
- 华硕服务器如何重装系统,讲解华硕重装系统教程
- 小红书最新的内容趋势是什么?
- 首屏加载,与less的初始化css
- 选择UTON PAD平板,这才是真正的平板电脑,双十二就它了
- ATmega8/16/32/64/128中文参考手册
- 电能表校验装置TD1550直流电能表检定装置
热门文章
- mysql数据库information_schema库中的表说明
- mysql创建视图sql_SQL视图介绍-如何在SQL和MySQL中创建视图
- C语言刷抖音源码,iOS多种刷新样式、音乐播放器、仿抖音视频、旅游App等源码...
- 基于图神经网络的节点表征学习
- 如何解决 CentOS系统下 使用localhost无法连接数据库
- origin对数据进行操作
- 最简单代码ASP.NET开源QQ登陆for Oauth2.0
- 货币量化宽松的投资机会-郎咸平
- oracle中merge into用法解析
- PyQt5入门——QListWidget实现图片缩略图列表