Viewpage+Fragment的组合使用

该文章来自转载,但连接忘记了,特此注明

本人接触安卓不久,在学习安卓这段时间里,一直都想像前辈一样,把自己遇到的问题,加上自己的理解整理成博文,在自己解决问题的同时,也对其它在学习该知识点时遇到问题的朋友们一个帮助。实在是一件好事。这是作者的第一遍博文,这篇博文就作为自己落户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的加载与布局,就不帖了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值