Android Fragment之间的数码交换

    private final static String 
    EXTRA_LANGUAGE_PICKED = "language_picked"; //键


//静态方法,提供从别的活动跳转到SecondActivity
public static Intent newIntent(Context packageContext, String languagePicked) {
        Intent intent = new Intent(packageContext, SecondActivity.class);
        intent.putExtra(EXTRA_LANGUAGE_PICKED, languagePicked);
        return intent;
    }

1-柒,后代采纳器

 写法:采纳器1 选取器2 …… 选拔器n{} 选取器之间空格分割
生效规则:只要满足,后一选取器是前3个拔取器的后生,即可知效。
(后代包蕴子代、孙代、重孙代。。。)

浅显地讲:只要后1个接纳器,在前2个接纳器里面即可。

 

div span{

}

 

 

 

 

归纳说一下要完毕的目的:
本项目包括八个运动和各自依附于那多少个活动的多个Fragment。
简易起见,那里分别为他们起名为:FirstActivityFirstFragmentSecondActivitySecondFragment
他俩中间的涉嫌是:
七个运动只负责容纳(可能说托管)其相应的八个Fragment。而实际的体现和与用户交互则由Fragment负责。

1-8、子代选用器

写法:选取器1>采纳器2>……>采用器n{} 选拔器之间用>分隔
生效规则:必须满意,后三个选用器是前一个采用器的间接子代,才能奏效。(中间不大概隔任何标签)

div>span{

}

[伪类选用器]
写法:伪类拔取器, 在选拔器前面用:分隔,紧接伪类状态;
 eg: .a:link .a:visited .a:hover
.a:active

 二,超链接的伪类状态:
 :link–未访问状态 :visited–已走访状态
 :hover–鼠标指上意况 :active–激活选定状态(鼠标点下未松)

 注意:当超链接两种伪类状态同时存在时,必须听从link–visited–hover–active的逐条,
 否则会促成有的采取器不见效。

 叁,input的伪类状态:
 :hover :focus–得到核心状态 :active

留意:input的有余气象同时存在,必须比照地点的相继。

4、其余标签,基本只用:hover状态。

 


先是种相比较直接:

SecondFragment简言之暴虐地通过getActivity()办法赢得托管本人的SecondActivity
下一场经过getIntent()格局赢得从FirstFragment中传过来的Intent对象;
终极得到其中的extra信息。

那种办法固然简易,但也有代价。那就是破坏了打包。使得SecondFragment不能够被复用。因为那时它还肩负了的工作。

一,CSS常用选拔器

CSS修改页面中的全体标签,必须依靠采纳器选中。
选取器中可以写多对CSS属性,用{}包裹:每一种属性名与属性值之间用:分隔,多对质量之间,必须用;分隔

 选择器{
 属性1:属性值1;
 属性2:属性值2;
 }


其次种方法比较复杂,但也更灵活:附加argument给Fragment:

要附加argument给Fragment,必要调用Fragment.setArguments(Bundle)方式。而且必须是在fragment创设后,添加给Activity此前。
因此,一般的惯用做法是在Fragment类中添加newInstance()静态方法。
经过这几个措施成功fragment实例以及Bundle对象的创制,
末尾再把argument放入bundle对象中,并附加给fragment:

//SecondFragment
public class SecondFragment extends Fragment {

private static final String 
ARG_LANGUAGE_PICKED = "arg_language_picked";

    TextView mText;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_second, container, false);
        mText = v.findViewById(R.id.language_picked);
        String languagePicked 
= getArguments().getString(ARG_LANGUAGE_PICKED);
        mText.setText(languagePicked);
        return v;
    }

//newInstance()方法
    public static Fragment newInstance(String languagePicked) {
        Bundle bundle = new Bundle();
        bundle.putSerializable(ARG_LANGUAGE_PICKED, languagePicked);

        Fragment SecondFragmentInstance = new SecondFragment();
        SecondFragmentInstance.setArguments(bundle);
        return SecondFragmentInstance;
    }

}

近日我们有了这些主意,又取得了FirstFragment传扬的Intent对象中的extra音讯languagePicked
大家只需求在SecondActivityonCreate()方法中,将languagePicked作为参数传入SecondFragment.newInstance()方法;
即可完毕,在SecondFragment成立之后,被添加给SecondActivity之前;
SecondFragment装载argument

//SecondActivity
public class SecondActivity extends AppCompatActivity {

private final static String 
EXTRA_LANGUAGE_PICKED = "language_picked";

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//使用通用的Fragment容器,
setContentView(R.layout.common_fragment_container);
//因为目前两个Activity的布局中
//其实都只需要一个用于容纳Fragment的frameLayout

        //要想在Activity中创建Fragment,先要得到FragmentManager
        FragmentManager fragmentManager = getSupportFragmentManager();
        Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);

        if (fragment == null) {
            //在firstActivity中通过Intent跳转到secondActivity,
            //SecondActivity创建之后,从传入的Intent中得到extra信息,
            //然后根据这个信息来创建secondFragment实例,
            //得到的信息将用来作为参数,传入secondFragment的newInstance()方法
            String languagePicked = 
getIntent().getStringExtra(EXTRA_LANGUAGE_PICKED);
//SecondFragment.newInstance()方法
            fragment = SecondFragment.newInstance(languagePicked);

            fragmentManager.beginTransaction()
                    .add(R.id.fragment_container, fragment)
                    .commit();
        }


    }

    //静态方法,提供从别的活动跳转到自身的Intent
    public static Intent newIntent(Context packageContext, String languagePicked) {
        Intent intent = new Intent(packageContext, SecondActivity.class);
        intent.putExtra(EXTRA_LANGUAGE_PICKED, languagePicked);
        return intent;
    }
}

这一做法的灵活之处就在于:
SecondFragment尽管如此必要取得数码,然而它不再亲自去
而是由托管它的Activity(此处是SecondActivity)来担负提供数据。
如此一来,就贯彻了SecondActivity的复用。
即使现在有一个ThirdActivity也想要托管SecondFragment,这它只要能提供数据(类似于SecondActivity提供的languagePicked),那它就相同可以其onCreate()方法中作出类似的完成。
— end —

水平有限,难免纰漏,如有错误,欢迎指正。
诸君共勉:)

1-3、id选择器

写法:#id名{}
调用:须求调用样式的标签,起三个id=”id名”

 优先级:id选择器>class选择器

只顾:七个页面中,无法出现同名id

#one{
    background-color: yellow;
}

 

 


【class拔取器与id接纳器的界别】
1、写法不一样:class采用器用.申明,id采用器用#声明
2、优先级不等:id选拔器>class拔取器
三,功效范围分裂:class选用器可以屡屡调用,id采取器只好接纳几次。

拔取器的命名规范
 一,只可以有字母、数字、下划线、减号组合;
 二,开端无法是数字,也不只怕是唯有三个减号

一般起名要求有语义,使用英文单词与数字的构成。


 

SecondFragment想从SecondActivity当年取到数据有三种格局:

1-5、并集接纳器

写法:选择器1,选择器2,选择器3,……,选择器n{}
生效规则:多个选项器取并集,只要标签满意其中任意1个接纳器,样式即可知效。

li,.first{
    color: red;
}

在代码中落成时,FirstActivitySecondActivity依旧都不须要相应的Layout财富文件。因为它们唯一的成效只是为Fragment提供容器,所以那边只需要在java代码中为八个Activity设置contentView即可:

1-一,标签接纳器

 写法:HTML标签名{}
作用:可以选中页面中,全体与采取器同名的HTML标签。

li{
    color: red;
    font-size: 24px;
}

 

 

就是其一意思


FirstFragment中ListView item的点击回调:

页面中保有CSS代码,要求写入到<style></style>标签中。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

3-二,CSS常用背景属性

1、background-color:背景色

2、background-image: 背景图。 使用url(“”)选拔背景图片。
背景图和背景象同时设有时,背景图覆盖背景观。

叁,background-repeat: 背景图的重新格局,
 no-repeat:不平铺,repeat:平铺,repeat-x:沿x轴平铺,repeat-y:沿y轴平铺

 4、background-size:背景图的尺寸
[点名宽度 中度的写法]
>>>宽度中度的指定,可以写px,也得以写%(父容器宽高的比例)
>>>当写多少个属性时,分别代表宽度、中度
>>>当写壹天质量时,表示宽度,中度将会 等比缩放

[其他属性]
>>>contain:图片等比缩放,直到宽或高中较大的另一方面所安放百分百达成。
(可能导致较短的一边<百分百,图片不可以掩盖整个区域)
>>>cover:图片等比缩放,直到宽或高中较小的另一方面缩放到百分百收场。
(或者导致较大的一方面>百分百,图片超出区域显示不全)

5、background-position: 背景图偏移量
>>>指定地方:left/center/right top/center/bottom
 当只写三个值时,另3个私自认同居中。
>>>指定坐标:多个天性分别代表 水平位移 垂直位移
壹,坐标的值,可以是px单位,也得以是比例
贰,当写像素单位时:
水平方向:正数右移 负数左移;垂直方向:正数下移 负数上移;
(左负右正 上负下正)
3、当写%百分比时:一般只可以是正数。
代表的是,父容器去掉图片的宽高,剩余空白区域的分布比例。
eg:background-position:三成; 水平方向去掉图片宽度,剩余区域3:八分

            #div2{
                width: 25px;
                height: 25px;
                /*background-color: yellow;*/
                background-image: url("img/icon.gif");
                white-space: nowrap;
                text-indent: 30px;
                line-height: 25px;
                background-position: -133px 0px;
            }
            #div3{
                width: 24px;
                height: 28px;
                background-image: url("img/icon.gif");
                white-space: nowrap;
                text-indent: 30px;
                background-position: 0px -170px;
            }
            #div4{
                width: 42px;
                height: 19px;
                background-image: url("img/icon.gif");
                text-indent: 9px;
                font-size: 14px;
                white-space: nowrap;
                line-height: 16px;
                background-position: 0px -30px;
            }

 

 


 

※那里还有个小知识点

list-style: 修改小黑点的体制;
none 去点小黑点
url() 可以动用url导入二个小图片,作为列表的标识符号

float: 浮动  可以完成让块级成分,在一行中显得


 

肯定,多用Fragment能制作更灵敏的次第。
正文通过3个浅显的例子,来讲演fragment以内基于Argument的数码互换。

1-四,通用采取器

 写法:*{}
效益:能够选中页面中兼有的HTML标签
 优先级:最低!!!

 

*{
    color: orange;
}

 

Android Fragment Argument

 

为了卓越重点,那里只兑现最简便易行的成效:

style标签的type属性应该接纳text/css,可是type属品质够简单。

FirstFragment通过startActivity(intent)启动SecondActivity之后。
SecondActivity并不直接与用户交互。

1-二,类接纳器(class选用器)

 写法:.class名{}
调用:在必要调用选拔器样式的价签上,使用class=”class名”调用采纳器

先期级:class选用器>标签采取器,五个起争持时,优先级高的生效

 注意:假如须求五个类名,用空格分隔

 

.first{
    color: blue;
}

 

 

 

public class FirstFragment extends Fragment {

    ListView mList;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_first, container, false);
        mList = v.findViewById(R.id.list);
//点击回调
        mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Resources resources = getResources();
//得到资源文件中定义的字符串数组
                String[] languages = 
resources.getStringArray(R.array.languages);
                String str = languages[position];
                Intent intent = SecondActivity.newIntent(
getActivity(), str);
//启动SecondActivity
                startActivity(intent);
            }
        });
        return v;

    }
}

1-六,交集拔取器

 写法:选取器1选拔器2……采用器n{} 全数采取器挨着,没有分隔
生效规则:三个选项器取交集,则必须满意全体接纳器的要求,才能见效

li .first{

}

依照大家的构想,当用户点击FirstFragment中的ListView的item时,应该跳转到SecondActivity
为此,我们在SecondActivity中定义静态方法:

 2、CSS的导入格局及优先级权重

2-壹,优先级的权重
一,CSS生效的率先尺码是:近者优先!
即,哪个采纳器成效于最里层标签,则这几个选取器生效;
②当接纳器功能于同一层时,可以依据优先级权重进行添加统计:
id选择器*100>class选择器*10>标签采用器*1

专注:并集接纳器,约等于几个采取器拆开写,所以,并集选拔器的先期级不可以增加

叁,当拔取器功用于同一层,且优先级权重相等时,写在最后的接纳器 生效


 

2-二,引入CSS的两种方法
一,行内样式表:直接在HTML标签中,使用style=””的点子引用;
<div style=”height: 100px;
“></div>
优点:使用灵活,优先级权重最高;
 缺点:不符合w3c关于“内容与表现”分离的渴求;不便民样式复用;
 二,内部样式表:在<head></head>标签中,使用<style>标签包裹CSS代码;
 特点:一定水平上贯彻了HTML与CSS的分手,不过分别不够彻底,没有艺术多页面共用样式。
 三,外部样式表:将CSS单独写入CSS文件中,并于HTML文件涉及。
优点:彻底完成HTML与CSS的分别,符合W3C规范,有利于多页面复用统一样式。

2-2-1、导入CSS文件的三种形式
1、在<head></head>标签中,使用link链接:

引入外部CSS样式表:
rel:选择stylesheet

type:采取text/css,能够差不离

href:表示链接的CSS文件路径

 <link rel="stylesheet" type="text/css" href="CSS/02-CSS.css" />

二,在style标签中拔取@import导入

@import url("CSS/02-CSS.css");

[三种导入格局的分歧]

壹,link属于标准的HTML标签,而@import不是专业标签;
2、link可以包容全体低版本浏览器,而@import只在CSS2之后能用;
叁,link是将三个文件链接起来,起桥梁功效,而@import约等于将CSS文件复制到HTML文件中;
四,link会在HTML文件边加载的长河中,边链接CSS文件;
 而@import会在HTML文件全体加载完事后,再导入CSS文件

 

 


 

它要做的是:


setContentView(R.layout.common_fragment_container);

3-一,CSS常用文本属性

一,字体字号类:
壹,font-weight: 字体粗细, bold-加粗、normal-不奇怪、lighter-细体
 也足以接纳100~900数值,400表示normal,700表示bold
二,font-style: 字体样式。 italic-倾斜、normal-平日
叁,font-size:可以写像素单位px,也得以写%
200%代表浏览器默许大小(16px)的两倍=32px
4、font-family: 字系列列(字体族)。
>>>可以直接写字体名,也可以直接写字序列列名。
>>>常用字体:serif-衬线体 sans-serif-非衬线体
font-family能够吸纳五个值,用逗号分隔。表示优先利用第四个,
>>>假如没有这几个字体,依次向后采纳。日常,最后1个值放字序列列名:
eg:fongt-family: “微软雅黑”,”大篆”,sans-serif;
5、font缩写格局:
>>>顺序必须是font-weight font-style
font-size/line-height font-family
>>>分化属性之间用空格分隔;
>>>font-size/line-height必须一组,用/分隔
>>>font-family七个字体之间,用逗号分隔
eg: font: bold丁italic 32px/50px “微软雅黑”,serif;

 

二,字体颜色
一,color:字体颜色 可以是单词、十六进制、昂科拉GB等
②opacity:透明度,可选值0-1
[rgba和opacity的区别]
>>>WranglerGBA自己可以设置颜色,而opacity必须合作其余颜料属性使用
>>>rgba仅仅是让眼下因素设置的颜料透明;
而opacity,会让眼下成分里面的有着文字、背景、子成分都透明。
3、行距、对齐、其他类
一,line-height:行高。
可以写像素单位、可以直接写数字(表示暗中同意行距的几倍)
 可以写%(表示私自认同行距的百分比
>>>行高主要功能:让单行文字在div中垂直居中
设置行高等于div的万丈,及可让单行文字垂直居中。(卓殊 常用)
二,text-algin:设置区域内的行级成分水平对齐格局;left、center、right
三,letter-spacing: 字符间距,字与字中间的偏离
肆,text-decoration: 文本修饰;
underline-下划线、overline-上划线、line-through-删除线、none

5、overflow:设置超出区域文字的显示情势。
>>>overflow: hidden; 超出区域的文字吟唱不出示;
>>>overflow: scroll:无杂文字多少,都会显得档次垂直滚动条;
>>>overflow:
auto:自动,专擅认同效果。文字多突显滚动条,文字少不突显滚动条
>>>可以运用overflow-x和overflow-y单独修改八个方向的滚动条。
overflow-x: scroll;overflow-y: hidden;

六,text-overflow:设置行末多余文字的显示格局;
>>>clip:多余文字裁剪掉 ellipsis: 多余文字突显省略号
>>>突显省略号索要特出white-space:nowrap;使用
>>>【重点】设置行末呈现省略号(三行代码,缺一不可)

overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;

 

七,white-space:nowrap;设置中文行末,不断行突显

 八,text-indent:首行缩进。

九,-webkit-text-stroke: 文字描边。
-webkit-表示挚友webkit内核的浏览器生效,常见的有chrome、safari

十,text-shadow: 文字阴影,有八个属性值,空格分隔
>>>水平阴影距离,正数:表示阴影右移,负数:表示阴影左移;(左负右正)
 >>>垂直阴影距离,正数:表示阴影下移,负数:表示阴影上移;(上负下正)
 >>>阴影模糊距离,0代表阴影一点不模糊;
>>>阴影颜色;
缩写格局:text-shadow: 2px 2px
2px blue;

 

#div{
                font-weight: bold;
                font-style:italic;
                font-size: ;
                font-family: serif;
                font: bold italic 16px/50px "微软雅黑",serif;
                background-color: red;
                opacity: 0.5;
                line-height: 20px;
                text-align: center;
                letter-spacing: 5px;
                text-decoration: underline;
                overflow: auto;
                white-space: nowrap;
                text-overflow: ellipsis;
                text-indent: 20px;
                -webkit-text-stroke:0.5px blue;
                text-shadow: 2px 2px 2px blue;
            }

 


 

  • 将盛传的intent中的用户点击的编程语言名称取出来;
  • 接下来传给SecondFragment。由SecondFragment将它显得出来。

3、CSS常用文本属性

^CSS中的颜色代表方法^
一,间接使用颜色的单词表示:red green blue
二,行使颜色的十六进制丨表示:#ffffff
    5个人数,两两分组,分别表示红、绿、蓝的配比;
③使用rgb(0~255,0~255,0~255)三个人数,分别表示红、绿、蓝的配比;
4、rgba():第叁人数表示折射率。

width: 200px;
height: 200px;
background-color: rgb(255,255,255);

 


如图:

其一名为common_fragment_container的布局文件提供了2个FrameLayout来作为Fragment的容器:

  • FirstFragment中突显二个ListView,这么些ListView显示一串编程语言的名目。
  • 当用户点击其中的item时,会跳转到SecondActivity
  • 这时SecondActivityonCreate()办法运行,在里面加载SecondFragment
  • 最后SecondFragmentTextView控件依据传过来的消息展现相应的编程语言的名字。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图