androidfragment实现
❶ android 在fragment里的怎样实现滑动fragment
按照一般的思路,我们或许会这么做:首先,使用getActionBar()方法获得操作栏,然后我们将操作栏的导航模式设置为Tab,并添加一些Tab,然后实现TabListener接口;其次,我们将多个布局通过Inflater()方法变成View,然后放到ViewPager里面,并实现OnPageChangeListener接口就可以了。由此我们可以写出下面的代码:
package com.Android.AnyViewUI;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
public class MainActivity extends FragmentActivity implements TabListener,OnPageChangeListener {
private ActionBar mActionBar;
private ViewPager mViewPager;
private TabPagerAdapter mAdapter;
private ArrayList<View> mViews;
private ArrayList<ActionBar.Tab> mTabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
//取得ActionBar
mActionBar=getActionBar();
//以Tab方式导航
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//禁用ActionBar标题
mActionBar.setDisplayShowTitleEnabled(false);
//禁用ActionBar图标
mActionBar.setDisplayUseLogoEnabled(false);
//禁用ActionBar返回键
mActionBar.setDisplayShowHomeEnabled(false);
//添加Tabs
mTabs=new ArrayList<ActionBar.Tab>();
ActionBar.Tab tab0=mActionBar.newTab();
tab0.setText("界面一");
tab0.setTabListener(this);
mTabs.add(tab0);
mActionBar.addTab(tab0);
ActionBar.Tab tab1=mActionBar.newTab();
tab1.setText("界面二");
tab1.setTabListener(this);
mTabs.add(tab1);
mActionBar.addTab(tab1);
ActionBar.Tab tab2=mActionBar.newTab();
tab2.setText("界面三");
tab2.setTabListener(this);
mTabs.add(tab2);
mActionBar.addTab(tab2);
//获取ViewPager
mViewPager=(ViewPager)findViewById(R.id.ViewPager);
//初始化mViews
mViews=new ArrayList<View>();
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_0, null));
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_1, null));
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_2, null));
//初始化mAdapter
mAdapter=new TabPagerAdapter(mViews);
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(this);
//默认显示第二项
mViewPager.setCurrentItem(2);
}
@Override
public void onTabReselected(Tab mTab, FragmentTransaction arg1)
{
}
@Override
public void onTabSelected(Tab mTab, FragmentTransaction arg1)
{
if(mViewPager!=null)
{
mViewPager.setCurrentItem(mTab.getPosition());
}
}
@Override
public void onTabUnselected(Tab mTab, FragmentTransaction arg1)
{
}
@Override
public void onPageScrollStateChanged(int arg0)
{
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
@Override
public void onPageSelected(int Index)
{
//设置当前要显示的View
mViewPager.setCurrentItem(Index);
//选中对应的Tab
mActionBar.selectTab(mTabs.get(Index));
}
}
其中,TabPagerAdapter是一个继承自PagerAdapter的适配器类:
package com.Android.AnyViewUI;
import java.util.ArrayList;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
public class TabPagerAdapter extends PagerAdapter
{
private ArrayList<View> mViews;
public TabPagerAdapter(ArrayList<View> mViews)
{
this.mViews=mViews;
}
@Override
public void destroyItem(View container, int position, Object object)
{
((ViewPager)container).removeView(mViews.get(position));
}
@Override
public Object instantiateItem(View container, int position)
{
((ViewPager)container).addView(mViews.get(position), 0);
return mViews.get(position);
}
@Override
public int getCount()
{
return mViews.size();
}
@Override
public boolean isViewFromObject(View mView, Object mObject)
{
return (mView==mObject);
}
}
我们的代码从逻辑上来讲是没有什么问题的,但是当我们试图运行这段代码的时候,我们发现这段代码出了问题,而问题就出在OnTabSelected()上。但是我们冷静下来想了想,没有错啊,那么问题到底出在哪里呢?看到网上的朋友说,这里这个适配器应该继承自FragmentPagerAdapter:
package com.Android.AnyViewUI;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class ViewPagerAdapter extends FragmentPagerAdapter {
//定义三个Fragment的索引
public static final int Fragment_Index_0=0;
public static final int Fragment_Index_1=1;
public static final int Fragment_Index_2=2;
public ViewPagerAdapter(FragmentManager fragmentManager)
{
super(fragmentManager);
}
@Override
public Fragment getItem(int Index)
{
Fragment mFragemnt=null;
switch(Index)
{
case Fragment_Index_0:
mFragemnt=new Fragment_0();
break;
case Fragment_Index_1:
mFragemnt=new Fragment_1();
break;
case Fragment_Index_2:
mFragemnt=new Fragment_2();
break;
}
return mFragemnt;
}
@Override
public int getCount()
{
return 3;
}
}
其中,Fragment_0、Fragment_1、Fragment_2是继承自Fragment的类,由于三个布局基本一样,这里只给出Fragment_0的代码:
package com.Android.AnyViewUI;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment_0 extends Fragment
{
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
View mView=inflater.inflate(R.layout.layout_0, container, false);
return mView;
}
}
❷ Android组件之Fragment(一)---基础知识与运用
Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段!想想,如果一个很大的界面,我们 就一个布局,写起界面来会有多麻烦,而且如果组件多的话是管理起来也很麻烦!而使用Fragment 我们可以把屏幕划分成几块,然后进行分组,进行一个模块化的管理!从而可以更加方便的在 运行过程中动态地更新Activity的用户界面!另外Fragment并不能单独使用,他需要嵌套在Activity 中使用,尽管他拥有自己的生命周期,但是还是会受到宿主Activity的生命周期的影响,比如Activity 被destory销毁了,他也会跟着销毁!
引用官方的一张图片,其实已经说明问题了,就是为了更好的适配大屏,在大屏的时候,不需要去在一个activity内部通过复杂的布局和界面去实现,只需要去在一个activity内部,通过多个fragment来做界面布局实现即可,而且针对于多个fragment来说, 每个fragment有单独的生命周期,
Demo样例,我们在一个界面中,有上下两个fragment,如图所示:
Step 2: Fragment创建,视图加载,数据赋值
BlankFragment .java
Step 3: Activity在onCreate( )方法中调用setContentView()之后调用FragmentTransaction 进行事务提交
FragmentTestActivity.java
在xml中声明两个fragment,指定为具体的fragment
Step 1:定义Fragment的布局,就是fragment显示内容的
Step 2:自定义一个Fragment类,需要继承Fragment或者他的子类,重写onCreateView()方法 在该方法中调用:inflater.inflate()方法加载Fragment的布局文件,接着返回加载的view对象
BlankFragment.java
Step 3:在需要加载Fragment的Activity对应的布局文件中添加fragment的标签, 记住,name属性是全限定类名哦,就是要包含Fragment的包名,如:
Step 4: Activity在onCreate( )方法中调用setContentView()加载布局文件即可!
针对在一个Activity中的某个Layout中切换Fragment,,无非两种方法:
我们自己看一下方法注释
源码方法注释里面说的很明白,这个方法会移除所有的fragment,然后添加当前的fragment。
这时分为两种情况,一种是fragment已有并且在前台展示,一种是未有或者在后台,针对于前者,此时replace,生命周期不会发生变化,针对后者,生命周期会重新走
分为两种情况,一种fragment已存在,一种未存在,针对于前者,生命周期无变化,但是会回调onHiddenChanged方法,针对于后者,生命周期会创建一次。
1.Fragment是Google官方引入的一个为了适配大屏、多页面的一个组件。您可以理解为它就是一个类而已,只不过里面包含了View,并且与activity的生命周期进行了关联。
2.动态加载与静态加载相对来说,建议使用动态加载,静态加载固定在了xml文件中,永远不变。
3.replace的fragment如果不在前台,会执行所有生命周期,反之不会执行任何生命周期方法;hide+show生命周期并不会发生变化,但是会回调onHiddenChanged方法,在实际开发中,建议add之后,使用hide+show来操作fragment,一方面减少资源的重复加载和创建,另外一方面提升用户体验感。
4.fragment的生命周期大体上和activity一致,但是前期和后期多了一些东西,因为fragment内部有view,那么这个view需要进行创建、然后添加到activity内部,所以相应的在onCreate与onStart之间就多了几个方法-onCreateView、onViewCreated。相同的道理,fragment的view与activity解绑,也相应的在onStop与onDestory之间多个方法-onDestroyView。onAttach与onDetach可以理解为视图与activity产生关联和接触关联,是最开始和最后的步骤。
Demo地址
❸ android嵌套fragment怎么实现点击外层fragment控制内层fragment显示特定界面
message是一个fragment,在里面又有两个子fragment,(Firends和follow),后来把两个fragment改ViewPager方式进行切换,这时一定要注意msgAdapter=new FragmentMessagePagerAdapter(getChildFragmentManager());在new PagerAdapter时,一定要传入getChildFragmentManager(),而不是getSupportFragmentManager,
一级Fragment里的OnCreateView方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mActivity = getActivity();
View view = inflater.inflate(R.layout.activity_fragment_message,container,false);
Button btnFriends= (Button) view.findViewById(R.id.btn_friends);
Button btnFollow= (Button) view.findViewById(R.id.btn_follow);
btnFriends.setOnClickListener(this);
btnFollow.setOnClickListener(this);
vp = (NoScrollViewPager) view.findViewById(R.id.vp_noscroll);
list_fragments=new ArrayList<Fragment>();
//把两个子fragment实例化然后装到集合里
mFrendsFragment=new Message_Friends_Fragment();
list_fragments.add(mFrendsFragment);
mFollowFragment=new Message_Follow_Fragment();
list_fragments.add(mFollowFragment);
msgAdapter=new FragmentMessagePagerAdapter(getChildFragmentManager());
❹ android fragment 怎么实现
在fragment里面写一个回调函数 在activity里面重载onkeydown方法,他接收到事件就回调fragment里面的函数 这样也可以穿事件过去啦。
❺ android fragment能做什么
fragment的目的是适应众多分辨率,可以在不同屏幕上动态管理UI.可以将一个activty分成不同的区块来现实,大屏小屏实现很好的兼容 。
Android是在Android 3.0 (API level 11)开始引入Fragment的。
可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块。
可以把Fragment设计成可以在多个Activity中复用的模块。
当开发的应用程序同时适用于平板电脑和手机时,可以利用Fragment实现灵活的布局,改善用户体验。
❻ android fragment如何实现点击事件吗
可以在onCreateView里这样做:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_a, container, false);
bt_right =(Button)v.findViewById(R.id.right);
bt_right.setOnClickListener(new OnClickListener(){
public void onClick(){
//加入想要的功能
}
});
return v;}
请确保:R.layout.fragment_a这个布局文件里有ID为right的Button
❼ android中在fragment A里面点击button跳转到fragment B怎么实现
方法一:直接getActivity,使用activity的fragmenttransation的replace方法替换
假设
{
privateButtonbtn;
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
Viewview=inflater.inflate(R.layout.frag_one,null);
btn=(Button)view.findViewById(R.id.button);
btn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
FragmentManagerfm=getActivity().getFragmentManager();
fm.beginTransaction()
//替换为TwoFragment
.replace(R.layout.fragment_container,newTwoFragment())
.commit();
}
});
returnsuper.onCreateView(inflater,container,savedInstanceState);
}
}
但是这样做会使OneFragment和原activity的耦合度提高,fragment设计出来就是有重用的目的,所以不好,使用方法二
方法2:定义回调函数,当button按下调用回调
{
privateButtonbtn;
;
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
Viewview=inflater.inflate(R.layout.frag_one,null);
btn=(Button)view.findViewById(R.id.button);
btn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
if(onButtonClick!=null){
onButtonClick.onClick(btn);
}
}
});
returnsuper.onCreateView(inflater,container,savedInstanceState);
}
(){
returnonButtonClick;
}
publicvoidsetOnButtonClick(OnButtonClickonButtonClick){
this.onButtonClick=onButtonClick;
}
publicinterfaceOnButtonClick{
publicvoidonClick(Viewview);
}
}
这样只要在acitivty中设置回调即可
{
privateOneFragmentoneFragment=newOneFragment();
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//。。。
//。。。省略代码
oneFragment.setOnButtonClick(newOnButtonClick(){
@Override
publicvoidonClick(Viewview){
//切换到TwoFragment
fm.beginTransaction()
//替换为TwoFragment
.replace(R.layout.fragment_container,newTwoFragment())
.commit();
}
});
}
}
❽ android studio怎么实现fragment
这跟AS没有任何关系。在Eclipse及其他有android开发的IDE上都可以实现。实现步骤如下:
建立一个Fragment(代码里创建)。这里边主要是重写那个返回值是View的方法,因为你要构造Fragment的界面。
将Fragment添加到界面中。主要通过事务管理类进行添加及替换Fragment(FragmentTransction ft =getFragmentManager().beginTransaction())
❾ android中Fragment能否实现下拉刷新
可以啊。下拉刷新跟actionbar没有一毛钱的关系。
❿ android如何实现点击出现不同页面fragment
使用viewpage+ fragment 配合开发,可以实现 左右滑动 切换 fragment ,CSDN里面有很多相关博客也有源码,可以参考,我也是里面下载,可以用的额
你问的是点击按钮的话,就更简单了,
DetailFragmentdetailFragment=newDetailFragment();
=this.getFragmentManager()
.beginTransaction();
fragmentTransaction.replace(R.id.detail_one2,detailFragment);
fragmentTransaction.commit()
参考下