该文章来自转载,但连接忘记了,特此注明
本人接触安卓不久,在学习安卓这段时间里,一直都想像前辈一样,把自己遇到的问题,加上自己的理解整理成博文,在自己解决问题的同时,也对其它在学习该知识点时遇到问题的朋友们一个帮助。实在是一件好事。这是作者的第一遍博文,这篇博文就作为自己落户csdn的一个见证吧。今后希望自己能坚持写博文,目前自己只是一只菜鸟,希望各位看客多提意见,共同进步。好了,废话不多说,下面进入今天的正题:
一、对于viewpage与fragment的定义理解:
viewpage类用于在安卓客户端实现多页面切换的动态效果,该类存在于google自带的兼容包内。目前v4、v7、v11都对该类做了兼容,可以很方便的使用。在引用时,记得在build_path中加入:android-support-v4.jar 已经成功添加的路径为工程目录下的librarys目录下。
fragment是安卓3.0版本google公司提供的针对平板设备的一种新技术,属于轻量级的activity,fragment可以将activity分离成多个可重用的组件,每一个组件都有其自己的生命周期与UI,每一个fragment都与activity紧紧的绑定在一起,可以在运行时,动态的加入、删除、切换。
二、两者结合的作用:
fragment的出现,替换了tabactivity,因为接触安卓也就几个月,所以对tabactivity是否过时的理解不太清楚,知道的还请告知。
首先看mainactivity的代码:
public class MainActivity extends FragmentActivity implements MyListener{
private ViewPager viewPager;//viewpager对象
private List<Fragment> fragment;//fragment集合
private FragmentManager manager;
private CheckoutFragment fragment1;//身份验证
private billFragment fragment2;//快拿账单
private AuthenFragment fragment3;//快速退房
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewpage);
Initparams();
initFragment();
}
private void Initparams() {
fragment = new ArrayList<Fragment>();
fragment.add(new MainFragmentpage());
fragment.add(new SettingFragmentpage());
fragment.add(new SystemFragmentpage());
Myadapter adapter = new Myadapter(getSupportFragmentManager(),fragment);
viewPager.setAdapter(adapter);
}
private void initFragment() {
fragment1 = new CheckoutFragment();
fragment2 = new billFragment();
fragment3 = new AuthenFragment();
}
/**
* 通过tag来返回不同的fragment的判断条件
* @param tag
* @return
*/
public Fragment getFragmentByTag(String tag){
//
if(tag.equals(Constant.Authentication)){
return fragment1;
}else if(tag.equals(Constant.Cache_bills)){
return fragment2;
}else if(tag.equals(Constant.Fast_CheckOut)){
return fragment3;
}
return null;
}
/**
* 我们调用该方法时,只需要传递一个tag就行了。
*/
@Override
public void transfrg(String tag) {
manager = getSupportFragmentManager();
FragmentTransaction action = manager.beginTransaction();
action.replace(R.id.main_content, getFragmentByTag(tag));
action.addToBackStack(null);//增加返回键的回退操作,可以像activity一样进行逐级返回。
action.commit();
}
public class Myadapter extends FragmentPagerAdapter{
public Myadapter(FragmentManager fm, List<Fragment> fragment) {
super(fm);
}
//根据角标位置加载不同的fragment页。
@Override
public Fragment getItem(int position) {
return fragment.get(position);
}
@Override
public int getCount() {
return fragment.size();
}
}
/**
* 配置页面滑动的监听事件。
*/
public OnPageChangeListener listener = new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
//当页面按下时的操作。
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
//向左滑动还是向右滑动
}
@Override
public void onPageScrollStateChanged(int arg0) {
//是否滑动
}
};
}
一个fragment的切换操作的方法。
public interface MyListener {
public void transfrg(String tag);
}
把mainfragment的代码也帖上:
public class MainFragmentpage extends BaseFragment implements OnClickListener,MyListener{
//初始化handler
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {};
};
private View view;//界面主界面
private Button button1;//身份验证
private Button button2;//快取账单
private Button button3;//快速退房
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.mainfragment, null);
init(view);
return view;
}
private void init(View view) {
button1 = (Button) view.findViewById(R.id.button1);
button2 = (Button) view.findViewById(R.id.button2);
button3 = (Button) view.findViewById(R.id.button3);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
}
/**
* 要在第一個fragment中添加3個按钮。像转发器一样。
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
@Override
/**
* 完成fragment的切换操作。其它两个fragment也都是一个极简单的页面
*/
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
myListener.transfrg(Constant.Authentication);
// CheckoutDialog dialog = CheckoutDialog.getInstance(getActivity(), handler, 0);
// dialog.show();
break;
case R.id.button2:
myListener.transfrg(Constant.Cache_bills);
break;
case R.id.button3:
myListener.transfrg(Constant.Fast_CheckOut);
break;
default:
break;
}
}
PagerAdapter adapter = new PagerAdapter() {
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return false;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
return super.instantiateItem(container, position);
}
public void destroyItem(ViewGroup container, int position, Object object) {
};
};
}
一个常量类:
public class Constant {
/**
* 常量类,对不同fragment的状态进行定义。
*/
private static Constant instance = null;
private Constant() {
}
public static Constant getInstance() {
if (instance == null) {
instance = new Constant();
}
{
return instance;
}
}
public static final String FRAG_MAIN = "wait_main";
/**身份验证,对应fragment1***/
public final static String Authentication= "Authentication";
/**快取账单对应fragment2***/
public static final String Cache_bills= "Cache_bills";
/**快速退房对应fragment3***/
public final static String Fast_CheckOut= "Fast_CheckOut";
}
核心代码就这么多了。剩下的就是几个fragment的加载与布局,就不帖了。