Android动态添加碎片代码实例
程序员文章站
2023-11-22 15:24:46
碎片的创建
要使用碎片先要创建一个碎片,创建一个碎片很简单。
1.新建一个碎片布局,fragment.xml
碎片的创建
要使用碎片先要创建一个碎片,创建一个碎片很简单。
1.新建一个碎片布局,fragment.xml
<?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"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是碎片1"/> </linearlayout>
2. 新建一个类fragment1.java,继承自fragment
注意fragment有两个不同的包,推荐使用support-v4中的,兼容性更好,另一个安卓4.2以下就会崩溃。在该碎片中可以进行各种操作,就如同操作一个activity。
public class fragment1 extends fragment { @nullable @override public view oncreateview(layoutinflater inflater, @nullable viewgroup container, bundle savedinstancestate) { view view=inflater.inflate(r.layout.fragment_questions1,container,false); log.d("questionmain1","碎片1加载"); return view; } }
碎片和活动之间的通信。虽然碎片都是嵌入在活动中显示的,但他们之间的关系并不明显。
1.在活动中调用碎片的方法。fragmentmanagert提供了一个类似于finviewbyid()的方法,用于从布局文件中获取碎片的实例。如果是动态加载的就跟简单了加载是你就有了该碎片的实例。
2.在碎片中调用活动的方法。可以通过getactivity()方法得到和当前碎片绑定的活动实例。
碎片的绑定
1.静态绑定
在活动布局中加一个碎片标签,比较简单不细说。android:name="",该标签为碎片对应的类,注意要包含路径全名。
<?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"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是碎片3"/> <fragment android:id="@+id/fragment1" android:name="com.example.fragment1" android:layout_width="match_parent" android:layout_height="match_parent" /> </linearlayout>
2.动态绑定
这个才是碎片的强大之处,在程序运行时动态的添加到碎片中,根据具体情况来动态添加碎片,可以将程序界面定制得更加多样化(多用于自适应手机和平板的应用)
下面的代码以点击按钮。有三个碎片,通过点击事件在一个活动中动态切换显示的碎片。
package com.xiaobu.xiaoyan1.question; import android.os.bundle; import android.support.v4.app.fragment; import android.support.v4.app.fragmentmanager; import android.support.v4.app.fragmenttransaction; import android.view.view; import android.widget.textview; import com.xiaobu.xiaoyan1.r; import com.xiaobu.xiaoyan1.base.baseactivity; public class questionsmain extends baseactivity implements textview.onclicklistener{ private textview fragment1; private textview fragment2; private textview fragment3; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_question_main); initview(); } private void initview(){ ((textview)findviewbyid(r.id.question_text)).settextcolor(getresources().getcolor(r.color.colortextchecked)); fragment1=(textview)findviewbyid(r.id.quiz_text_view); fragment2=(textview)findviewbyid(r.id.answer_text_view); fragment3=(textview)findviewbyid(r.id.chosen_text_view); fragment1.setonclicklistener(this); fragment2.setonclicklistener(this); fragment3.setonclicklistener(this); changefragment(new questionsmain1()); checkedchange(fragment1); } @override public void onclick(view v) { switch (v.getid()){ case r.id.quiz_text_view: changefragment(new questionsmain1()); break; case r.id.answer_text_view: changefragment(new questionsmain2()); break; case r.id.chosen_text_view: changefragment(new questionsmain3()); break; default: break; } } private void changefragment(fragment fragment){ fragmentmanager fragmentmanager=getsupportfragmentmanager(); fragmenttransaction transaction=fragmentmanager.begintransaction(); transaction.replace(r.id.main_view,fragment);//第一个参数表示容器的id,第二个参数为碎片实例。 transaction.commit(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Vue实现的父组件向子组件传值功能示例
下一篇: PHP的变量类型和作用域详解