Fragment的添加步骤

使用碎片的目的:
在相同的布局上能切换不同控件




碎片的添加步骤
1.碎片容器(推荐使用FrameLayout帧布局)
(想要几块碎片就放几个帧布局,哪块想使用碎片 就预留出并放帧布局)
2.制作碎片用的布局
   普通碎片(继承Android.app.Fragment):可以设置任何布局和控件
   列表型碎片(继承Android.app.ListFragment):只需要设置list一项用的布局模板
3.碎片类制作
一、普通碎片(继承Android.app.Fragment)
(1)在普通碎片类中添加OnCreateView()方法
   目的是加载布局,
(2)在OnCreateView()方法中,初始化视图对象
   View myview=布局引用器对象(通常叫inflater).inflate(R.layout.xxx布局,null);
(3) 如果需要使用布局中的控件(想要对控件点击,修改文本,修改图片)
   控件 控件对象=(控件)myview.findViewById(R.id.xxx);
(4)如果想要给控件赋值
   文本类的(TextView/EditText):xxx.steText("wenben");
   图片类的(ImageView):xxx.setImageResource(R.drawable.xx)图片前景
                          xxx.setBackgroundResource(R.drawable.xx)图片背景
(5)如果按钮需要点击事件(碎片里的按钮和ImageView只能使用第一、二种点击事件)
   按钮对象.setOnClickListener(new 直接帮助);
(6)把onCreateView方法的返回值修改为return myview;
  *   xxx都是对象
(7)创建碎片管理器,在Activity页面或其他碎片中创建碎片管理器
   FragmentManager manager=getFragmentManager();仅限于在页面中使用
   FragmentManager manager=getActivity().getFragmentManager();仅限于在碎片中使用
(8)创建碎片事务(添加、替换、隐藏、显示、移除)
   *尽量不使用(添加)add
   FragmentTransaction tr=manager.beginTransaction();开始创建碎片事务
(9)创建要执行事务的碎片对象
   某Fragment 某对象=new 某Fragment();
(10)描述事务操作
   tr.replace(容器的id,某碎片的对象);
(11)提交事务
   tr.commit();






public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//初始化适配对象
//inflater是自带的布局引用器
//inflate是引用布局方法
View myview=inflater.inflate(R.layout.fragment1, null);
//初始化Text
TextView tv=(TextView)myview.findViewById(R.id.textView1);
Button btn=(Button)myview.findViewById(R.id.button1);
EditText et=(EditText)myview.findViewById(R.id.editText1);
ImageView iv=(ImageView)myview.findViewById(R.id.imageView1);
//给文本赋值
tv.setText("文本赋值");
et.setText("输入框赋值");
//设置前景
iv.setImageResource(R.drawable.ic_launcher);
//按钮点击事件
btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
System.out.println("你点我了昂");
}
});
return myview;

}
}




在主页面onCreate里(7-11)
               //创建碎片管理器
FragmentManager manager=getFragmentManager();
//创建碎片事务
FragmentTransaction tr=manager.beginTransaction();
//创建碎片对象
MyFragment myfg=new MyFragment();
//执行替换操作
tr.replace(R.id.fl, myfg);
//提交事务
tr.commit();






3.碎片类制作
二、列表型碎片(继承Android.app.ListFragment):
(1)在列表型碎片中添加OnCreateView()方法,目的是初始化数据和初始化适配器,加载适配器
(2)在全局变量位置(方法外)定义List集合
    List<某个实体> mylist=new ArrayList<某个实体>();
    作用:存储数据和使用数据
    添加数据:mylist.add(某个实体的对象);
    获取数据:mylist.get(某个位置);  将要返回一个某个实体的对象
    获取数据的详情:mylist.get(位置).getPic();  将返回某个实体的图片属性
(3)在列表型碎片类中添加dataInit(){}方法
    作用:数据初始化
eg: Goods gb=new Goods();
    gb.setPic(R.drawable.xxx);
    mylist.add(gb);
(4)在OnCreateView()方法中调用dataInit()方法
(5)创建适配器
    a.数组适配器(每行只能展示一个text)
      创建数组适配器
         一参:Context上下文 在页面中:赋值是当前页面.this
                             在碎片中:赋值是getActivity()
         二参:android.R.layout.simple_list_item_1
         三参:mylist
模板:(写在碎片java文件里)
ArrayAdapter myadapter=new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,mylist);
      注意:在ListFragment中使用数组适配器,mylist只能存储String类型的数据
    b.基础适配器(什么都能放)
      创建一个类MyAdapter继承BaseAdapter
      实现BaseAdapter中的四个抽象方法
          getCount()作用:获得数据的数量
          getItem()作用:获得每条列表项中的对象
          getItemId()作用:获得每条列表项的编号
          getView()作用:获得每条列表项的视图
      定义List集合
         List<某个对象实体> mylist=new ArrayList<某个对象实体>();
      声明布局引用器
         LayoutInflater inflater;
      创建构造方法
public MyAdapter(Context context,List<某个对象>outlist){
       //外部链表赋值给本类中的链表
       this.mylist=outlist;
       //初始化布局引用器
       inflater=LayoutInflater.from(context);
}
      创建list集合用的实体
实体的设计原则:界面上布局模板上如果有ImageView、TextView或者其他控件,
                需要进行设置内容的,实体就需要对应:
                ImageView在实体中设置int型Pic对象;
                TextView在实体中设置String类型的name对象。
  实体的set属性在dataInit()方法中设置
  实体的get属性在适配器MyAdapter的getView()方法中使用,
  目的:获取当前位置的实体,并把图片属性设置到ImageView上,把名称属性设置到TextView
  *可以在之前完成


新建java的MyAdapter类
List mylist=new ArrayList();
//声明布局引用器
LayoutInflater inflater;
public MyAdapter(Context context,Listoutlist) {
this.mylist=outlist;
inflater=LayoutInflater.from(context);


      在getCount()方法中修改返回值为mylist.Size();
          返回链表中的数量,有几个数据就显示几个列表项。
      在getItem(int arg0)方法中修改返回值为mylist.get(arg0)
          表示每个列表项中存储的数据类型
          有些java版本,arg0会改成position
      在getItemId()方法中修改返回值为return arg0;
          表示每个列表项的编号
      在getView(int arg0,View arg1,ViewGroup arg2)方法
          arg0表示当前的位置
          arg1表示当前的视图,需要使用布局引用器获得
          arg2表示页面组,用不上 null
      arg1=inflater.inflate(R.layout.listitem,null);
      初始化布局模板上的控件
       控件 对象=(控件) arg1.findViewById.(R.id.xxx);
      控件赋值
       文本类控件对象.setText(mylist.get(arg0).getName());
eg:@f102255kkdd 如果出现这种情况,就是设置了对象,而不是设置了对象中的参数
    一个实体=所有实体.get(某个位置);
    String name=一个实体.getName();
       图片类控件.setImageResource(mylist.get(arg0).getPic());
      修改getView()方法的返回值为return arg1;
(6)在列表碎片类的OnCreateView()方法中创建适配器的对象
   MyAdapter adapter=new MyAdapter(getActivity(),mylist);
   其中mylist是在列表碎片类的全局变量位置创建的,并且在dataInit()方法中添加实体对象
(7)在OnCreateView()方法中调用setListAdapter(MyAdapter);
(8)在页面中替换帧布局上的碎片方法步骤同普通碎片的(7-11)

你可能感兴趣的:(碎片的添加步骤)