关于Android中的Fragment个人小结

首先,需要明白几点:
1、Fragment是基于事务来实现,因为在替换(replace)碎片过程中,首先会把原来的碎片给删除,然后再去添加新的碎片,为了两次的操作的一致性,
所以开启一个事务,是这两个操作作为一个原子操作,从而更好保证一致性。

2、为什么要使用Fragment?

Fragment是Android 3.0出来的,那时候主要为了适应平板的开发,Fragment碎片也是和Activity一样也是

用于显示的界面,但是Fragment是属于轻量级的,而Activity是属于重量级消耗内存较大,Fragment的出现主要是为了分担Activity的负担,

3、实现Fragment和Activity的模块化:

在Activity中无需再针对每一个UI组件加以管理和控制,而是将Activity分为多个碎片,Activity对碎片块进行管理,而碎片块(Fragment)中放入UI组件,然后让碎片中具体对UI组件进行管理。从而实现Fragment和Activity模块化,以及他们各自分工明确。

4、如何实现一个Fragment:
Fragment有两种方法来进行装入,一种是静态装入,另一种就是动态Java代码的添加。
注意:
  1、在静态装入的时候:是在相关联的Activity中的布局文件中添加一个<fragment />UI布局组件容器,通过指定name属性即可,指定到相应的碎片。并且静态装入的时候可以直接通过findViewById方法获取相关联的Activity布局中的UI组件。
  2、在动态装入的时候:首先是在关联的Activity中的布局文件中获取到碎片容器的id,然后在关联的Activity中启动一个事务,来对动态装入碎片对象即可,
从碎片之间传递数据是通过setArgument方法实现
/***************个人对Fragment使用的总结*******************/
利用一个"先整体,后局部"思想。
1、首先、判断我关联的Activity中有几个Fragment碎片,也是我关联的Activity被划分几个碎片,有几个碎片就有几个碎片容器。
2、然后、再判断碎片是静态装入还是动态装入呢?? 若随着宿主Activity一同初始化显示的碎片,则为静态装入,若是经过触发哪个事件才会产生另一个碎片
则为动态装入。
3、得知装入方式后,若是静态装入的,则只需要指定关联的Activity中布局文件碎片容器为<fragment />,并且记住要指定name属性,指定指向的碎片对象
若是动态装入的,则需要到关联的Activity中去开启一个事务,动态将碎片对象装入到我们指定id布局文件的容器中即可
代码如下:
//1、创建FragmentManager对象
fManager=getFragmentManager();
//2、开启事务,Fragment是基于事务的
ft=fManager.beginTransaction();
//3、操作片段,添加,替换,删除
Fragment fragment=new FirstFragment();
ft.add(R.id.left_fragment,fragment, "first");//tag起到了标识的作用,标识不同的Fragment,第一个参数是表示把该片段放在Activity的


哪个位置,也就是在Fragment所关联的Activity布局文件的中某个指定位置的容器的id,
//例如我是把该碎片放在我的Activity_main中的左边的单帧布局容器中内容
//4、提交事务
ft.addToBackStack("two");//把添加碎片的事务也保存到回退栈中,实现按钮推到原先未修改的页面
ft.commit();
4、确定了怎么装入后,然后就是简单创建我们的碎片对象然后绑定布局即可
                              1、创建一个class去继承Fragment及子类

                              2、然后去重写OnCreateView方法,通过Inflate方法,将我们绑定的布局文件转化成一个View对象,并显示来即可。

关于Android中的Fragment个人小结_第1张图片

Fragment测试案例:

MainActivity.java(会发现关联的Activity代码很少,因为模块化带来好处,将Activity的负担分开了)

package com.zhongqihong.testfragmentapp;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
}
FirstFragment.java

package com.zhongqihong.testfragmentapp;

import android.annotation.SuppressLint;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;

@SuppressLint("NewApi")
public class FirstFragment extends Fragment{
	private FragmentManager fManager;
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View v=inflater.inflate(R.layout.left_fragment, container,false);
		Button btn=(Button) v.findViewById(R.id.display);
		Button btn2=(Button) v.findViewById(R.id.nodisplay);
		fManager=getFragmentManager();
		btn2.setOnClickListener(new  OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				FragmentTransaction ft=fManager.beginTransaction();
				ft.remove(fManager.findFragmentByTag("center"));
				ft.commit();
			}
		});
		btn.setOnClickListener(new OnClickListener() {

			@SuppressLint("NewApi")
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//在左边的碎片中获取按钮去动态的装入第二碎片
				FragmentTransaction ft=fManager.beginTransaction();
				ft.replace(R.id.center_fragment, new CenterListFragment(), "center");
				ft.commit();
			}
		});
		return v;
	}
}

CenterListFragment.java

package com.zhongqihong.testfragmentapp;

import android.annotation.SuppressLint;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

@SuppressLint("NewApi")
public class CenterListFragment extends ListFragment{
	@Override
	public void onListItemClick(ListView l, View v, int position, long id) {//该方法是监听ListFragment中每个Item点击事件
	    RightFragment fRightFragment=new RightFragment();       
		String content=l.getAdapter().getItem(position).toString();
	             Bundle bundle=new Bundle();
	             bundle.putString("item", content);
	             fRightFragment.setArguments(bundle);
	             FragmentManager fm=getFragmentManager();
	             FragmentTransaction ft=fm.beginTransaction();
	             ft.replace(R.id.right_fragment, fRightFragment, "right");
	             ft.commit();
	}
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		String [] data=new String[30];
		for (int i = 0; i < data.length; i++) {
			data[i]="item"+i;
		}
		ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, data);
		setListAdapter(adapter);
	}
}
RightFragment.java

package com.zhongqihong.testfragmentapp;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class RightFragment extends Fragment{
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View v=inflater.inflate(R.layout.right_fragment, container, false);
		TextView tv=(TextView) v.findViewById(R.id.tv);
		Bundle bundle=getArguments();
		String str= bundle.get("item").toString();
		tv.setText(str);
		return v;
	}
}


测试结果:

关于Android中的Fragment个人小结_第2张图片

你可能感兴趣的:(android,Fragment,Fragment,Fragment总结)