安卓Fragment的用法
来源:互联网 发布:淘宝主图视频多少秒 编辑:程序博客网 时间:2024/05/19 14:01
一、程序图
二、布局文件
(1)main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:id="@+id/contain" android:layout_width="fill_parent" android:layout_height="20px" android:layout_weight="9" > </FrameLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="20px" android:layout_weight="1" android:orientation="horizontal" > <Button android:id="@+id/fg_one_btn" android:layout_width="20px" android:layout_height="fill_parent" android:layout_margin="3px" android:layout_weight="1" android:text="First" /> <Button android:id="@+id/fg_two_btn" android:layout_width="20px" android:layout_height="fill_parent" android:layout_weight="1" android:layout_margin="3px" android:text="Second" /> <Button android:id="@+id/fg_three_btn" android:layout_width="20px" android:layout_height="fill_parent" android:layout_margin="3px" android:layout_weight="1" android:text="Three"/> </LinearLayout></LinearLayout>
(2) first.xml
<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:background="#123" android:gravity="center" android:orientation="vertical"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="FirstFragment"/> <Button android:id="@+id/hello" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="点击"/> </LinearLayout>
(3) second.xml
<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:background="#000" android:gravity="center"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="SecondFragment" android:textColor="#fff"/> </LinearLayout>
(4) three.xml
<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:background="#bd0708" android:gravity="center"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="ThreeFragment"/> </LinearLayout>
三、程序
(1)FragmentActivity.java
import com.liu.cn.fragment.FirstFragment;import com.liu.cn.fragment.SecondFragment;import com.liu.cn.fragment.ThirdFragment;import android.app.Activity;import android.app.Fragment;import android.content.Context;import android.graphics.Color;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class FragmentActivity extends Activity implements OnClickListener{ Button one,two,three; LayoutInflater inflater; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); init(); } public View getLayoutView(int layoutId){ View v=inflater.inflate(layoutId, null); return v; } private void init(){ one=(Button) this.findViewById(R.id.fg_one_btn); two=(Button) this.findViewById(R.id.fg_two_btn); three=(Button) this.findViewById(R.id.fg_three_btn); one.setOnClickListener(this); two.setOnClickListener(this); three.setOnClickListener(this); normalColor(); //初始化第一个fragment FirstFragment ff=new FirstFragment(); switchView(ff, one); } //正常颜色 private void normalColor(){ one.setBackgroundColor(Color.BLUE); two.setBackgroundColor(Color.BLUE); three.setBackgroundColor(Color.BLUE); } //fragment之间的转换,并且改变对应的按钮颜色 private void switchView(Fragment fg,View v){ v.setBackgroundColor(Color.GRAY); getFragmentManager().beginTransaction(). replace(R.id.contain, fg).commit(); }public void onClick(View v) {normalColor();int id=v.getId();switch (id) {case R.id.fg_one_btn:FirstFragment ff=new FirstFragment();switchView(ff, v);break;case R.id.fg_two_btn:SecondFragment sf=new SecondFragment();switchView(sf, v);break;case R.id.fg_three_btn:ThirdFragment tf=new ThirdFragment();switchView(tf, v);break;default:break;}}}
(2) BaseFragment .javaimport com.liu.cn.R.layout;import android.R.integer;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;//定义一个抽象基类BaseFragment,当3个fragment之间有公用的方法时,可把方法写在这里,其他fragment继承//Basefragment,方法可以之间调用,好处就在这儿,用的久了就体现出来了public abstract class BaseFragment extends Fragment{private FragmentActivity activity;public View LayoutView;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//强转,调用fragmentActivity中的getLayoutView方法;activity=(FragmentActivity) getActivity();//下面俩行不能颠倒,否则空指针错误,原因是找不到布局文件LayoutView=activity.getLayoutView(getLayoutId());createChild(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {return LayoutView;}public abstract void createChild( Bundle savedInstanceState);public abstract int getLayoutId();}
(3) FirstFragment.javaimport com.liu.cn.BaseFragment;import com.liu.cn.R;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;//在找布局文件中的组件时,可按下面的按钮示例初始化,并做其他的事情,其他的fragment初始化都一样//在这里就不多啰嗦了,剩下的俩个fragment中你们可以练习下public class FirstFragment extends BaseFragment{@Overridepublic void createChild(Bundle savedInstanceState) {Button firstBtn=(Button) LayoutView.findViewById(R.id.hello);firstBtn.setOnClickListener(new OnClickListener() {public void onClick(View v) {Toast.makeText(getActivity(),"点击了第一个Framgment中的按钮", 0).show();}});}@Overridepublic int getLayoutId() {// TODO Auto-generated method stubreturn R.layout.first;}}
(4) Secondfragment.java
import android.os.Bundle;import com.liu.cn.BaseFragment;import com.liu.cn.R;public class SecondFragment extends BaseFragment{@Overridepublic void createChild(Bundle savedInstanceState) {}@Overridepublic int getLayoutId() {// TODO Auto-generated method stubreturn R.layout.second;}}
(5) ThirdFragment,java
import android.os.Bundle;import com.liu.cn.BaseFragment;import com.liu.cn.R;public class ThirdFragment extends BaseFragment {@Overridepublic void createChild(Bundle savedInstanceState) {}@Overridepublic int getLayoutId() {// TODO Auto-generated method stubreturn R.layout.three;}}
- 安卓Fragment的用法
- 安卓Fragment的用法
- 安卓静态Fragment与动态Fragment的理解
- 安卓--第七天--fragment的实现
- 安卓开发之Fragment的嵌套
- 安卓强大的Fragment管理器
- 安卓的fragment跳转问题
- 安卓:Fragment的懒加载
- 安卓-Fragment 详解
- 【安卓笔记】Fragment
- 安卓之Fragment
- 安卓Fragment介绍
- 安卓014Fragment
- 安卓019Fragment
- 安卓 fragment
- 安卓Fragment 碎片!!!
- 安卓之fragment
- 安卓 log 的用法
- [HDU 3336]Count the String[kmp]
- Case用法
- Where Should the Bugs Be Fixed? 导读
- Android系统信息获取 之八:WIFI设备和WIFI信号信息获取
- 20130429-泰山小记
- 安卓Fragment的用法
- 项目总结----sql数据库使用总结
- eclipse常用快捷键
- C基础:结构体
- UVA 11995 (STL应用 13.08.07)
- windows中用命令行操作控制面板
- 即兴演讲很重要
- ip_conntrack对路由结果的cache
- 蜗牛日记_创业中遇到的美术问题