首页 > 代码库 > 赵雅智_通过fragment对布局进行改变
赵雅智_通过fragment对布局进行改变
项目需求
设置两个片段,昨天片段对右边进行颜色更改,片段替换的操作
实现效果
点击片段1:改变片段1的颜色值
点击片段2替换片段1
实现步骤
- 新建主activity并在布局添加两个片段
- 左片段
- 对片段1进行颜色值改变的点击事件
- 获取FragmentManager对象,只要获取FragmentManager对象就能获取fragment对象
- 根据FragmentManager对象的findFragmentById方法来获取指定的fragment
- 获取Fragment中的布局文件
- 获取view中任何控件
- 改变颜色背景值
- 获取FragmentManager对象,只要获取FragmentManager对象就能获取fragment对象
- 对片段2进行替换的点击事件
- 获取FragmentManager对象
- 获取fragment的事务操作 代表:activity对fragment执行的多个改变的操作
- 执行替换
- 提交事务
- 获取FragmentManager对象
- 对片段1进行颜色值改变的点击事件
- 右片段
- 设置布局
项目源码
布局文件
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="match_parent" tools:context=".MainActivity" > <fragment android:id="@+id/fragment1" android:name="com.example.android_fragment.other.MyFragment1" android:layout_width="100dp" android:layout_height="match_parent" /> <fragment android:id="@+id/fragment2" android:name="com.example.android_fragment.other.MyFragment2" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_toRightOf="@+id/fragment1" /> </RelativeLayout>
fragment_list_item1.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="20dp" android:paddingTop="10dp" android:background="#DCB5FF"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="片段1" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="片段2" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="片段3" /> <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="片段4" /> </LinearLayout>
fragment_list_item2.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll_item" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFBFFF" android:orientation="vertical" android:paddingTop="10dp" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="TextView" /> </LinearLayout>
fragment_list_replace.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" android:orientation="vertical" android:background="#FFE66F" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:paddingTop="10dp" android:text="替换的textview" /> </LinearLayout>
MainActivity.java
package com.example.android_fragment; import android.os.Bundle; import android.support.v4.app.FragmentActivity; /** * 主activity,包含2个片段 * @author zhaoyazhi * * 2014-6-13 */ public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.activity_main); } }
MyFragment1.java
package com.example.android_fragment.other; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import com.example.android_fragment.R; /** * 左边片段 * @author zhaoyazhi * * 2014-6-13 */ public class MyFragment1 extends Fragment { private FragmentActivity activity; /** * 把activity造型为FragmentActivity */ @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); this.activity = (FragmentActivity) activity; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //设置布局 View view = inflater.inflate(R.layout.fragment_list_item1, container, false); //查找控件并设置点击事件 TextView tv1 = (TextView) view.findViewById(R.id.textView1); tv1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //改变背景值 changeFragmentColor(); } }); //查找控件并设置点击事件 TextView tv2 = (TextView) view.findViewById(R.id.textView2); tv2.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //改变整个Fragment changeFragment(); } }); return view; } //改变整个Fragment private void changeFragment() { // 1.获取FragmentManager对象 FragmentManager manager = getActivity() .getSupportFragmentManager(); // 2.获取fragment的事务操作 代表:activity对fragment执行的多个改变的操作 FragmentTransaction transaction = manager.beginTransaction(); // 添加替换或删除Fragment这时候就需要FragmentTransaction的布局动态文件 // 执行替换 //参数1:父元素的id值,参数2:替换新fragment对象 transaction.replace(R.id.fragment2, new MyFragment3()); // 3.提交事务 transaction.commit(); } //改变控件的颜色 private void changeFragmentColor() { // 1.获取FragmentManager对象,只要获取FragmentManager对象就能获取fragment对象 FragmentManager manager = getActivity() .getSupportFragmentManager(); // 2.根据FragmentManager对象的findFragmentById方法来获取指定的fragment Fragment fragment2 = manager.findFragmentById(R.id.fragment2); // 3.获取Fragment中的布局文件 View v = fragment2.getView(); // 4.获取view中任何控件 LinearLayout layout = (LinearLayout) v .findViewById(R.id.ll_item); // 5.改变颜色背景值 layout.setBackgroundColor(Color.YELLOW); } }
MyFragment2.java
package com.example.android_fragment.other; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.android_fragment.R; /** * 右边片段 * @author zhaoyazhi * * 2014-6-13 */ public class MyFragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_list_item2, container, false); return v; } }
MyFragment3.java
package com.example.android_fragment.other; import com.example.android_fragment.R; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * 全部替换的右边片段 * @author zhaoyazhi * * 2014-6-13 */ public class MyFragment3 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_list_replace, container, false); } }
知识点解析
为了兼容android1.6,MainActivity继承于FrameActivityFragment
片段类引用android.support.v4.app.*;包中的组件
实现片段要继承Fragment类,实现onCreateView方法
inflater.inflate(R.layout.layout1,container,false);
- 第一个参数把某一布局文件转换成view对象;
- 第二参数是把这个view对象放入container容器中;这个container容器其实就是activity_main的根节点,可以通过在根节点下设置tag属性,并通过container.getTag()获取值,再将其打印出来。
- 第三个参数代表是否把这个view对象添加到container容器内部,在xml中我们已经将它添加到容器内部。经测试,如果此时你再将之设置为true,其依然能够正确执行。
fragment中name属性
name值是片段所对应的fragment类
FragmentTransaction
获取fragment的事务操作 代表:activity对fragment执行的多个改变的操作
添加替换或删除Fragment这时候就需要FragmentTransaction的布局动态文件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。