当前位置:首页 » 安卓系统 » androidfragment方法

androidfragment方法

发布时间: 2023-07-24 22:24:20

① android fragment 刷新功能

本文 介绍两点 已是fragment的切换 一是fragment刷新  

先说第一点 fragment的切换  

目前fragment在开发中应用越来越广泛 当然也非常方便 

而我们切换fragment 也有两中方式 

第一种是replace的方法进行的 这种方式要看运用场景 用起来很方便 但是个人感觉效果并不好 因为这种方式进行切换得话 首先他会remove掉当前的fragment,然后在new 一个新的fragment进行add,也就是说当前fragment中的所有东西都是重新加载的 所以个人不建议使用这种方式进行fragment的高频率切换 这种只适合fragment切换和使用次数比较少的情况 

第二种是show+hide 进行fragment切换 这种方式相比第一种可能会复杂一点 首先要建立几个fragment 开始事务 然后判断添加 举个例子 

1 创建fragment…… 

2 添加事务 android.app.FragmentTransaction ft = getFragmentManager().beginTransaction(); 

–#在添加之前先进行判断隐藏#– 

// 这是hide fragment 的方法 

onHideFragment(ft); 

3 判断添加 

if (homeFragment==null){ 

homeFragment = new HomeFragment(); 

ft.add(R.id.content,homeFragment); 

}else { 

ft.show(homeFragment); 



4 判断隐藏 

if (homeFragment!=null){ 

ft.hide(homeFragment); 



5 添加一个默认显示fragment 也就是你进入activity需要显示的那个 

好 此时你就完成了使用hide + show 进行fragment切换了

现在我们说第二点 就是fragment的刷新需求  

我们可能会需要fragment的刷新功能 例如说是我首页使用fragment 进行功能切换时 希望返回到之前的fragment可以刷新 或者返回到activity时 fragment也可以刷新 本人使用了 两种方法进行fragment的刷新 我想大部分应该都会使用第一种 返回activity时 fragment刷新 就是重写acvitity的onstart() 方法进行刷新fragment的数据 但是这是有弊端的 第一就是假如你使用了listview或者gridview 时会出现重复加载的情况 所以使用这种方法时 你就要进行清空数据并刷新适配器就可以避免了 

第二种 就是使用hide+show时 在fragment进行切换时 刷新fragment 此时会有这样一个这样的方法 onHiddenChanged(boolean hidden);看方法名 你也可以看出来 就是在hide有变化时使用 hidden参数是boolean 当hidden为true时表示fragment在hide 此时不必更新数据 当hidden为false时 他就不隐藏了 此时更新 

if (hidden){ 

return; 

}else { 

list.clear(); 

getSellList(); 



list是要清空的 避免重复加载 

–#onHiddenChanged(boolean hidden); 这是fragment的方法哦 !!!#– 

本文 到此结束 希望对各位有所帮助 有问题可以评论区提出 大家一起进步

② Android activity与fragment之间通信的好的方法有哪些

在fragment里面有个重写的onAttach方法,可以引用到对应的父Activity。另外,可以用接口实现他们之间的数据交互,还可以写成公共静态方法,直接用类名调用。需要灵活处理。

③ Android回顾--(十七) Fragment的使用与必踩之坑

  碎片,抽象的理解就是一个控件,只是这个控件内部维护了自身的生命周期。Fragment是依赖于Activity,用于显示页面的一部分内容。

这里有的人就会提出疑问了,Android中其他的控件也能在页面显示一部分的内容,为什么还要引入Fragment?

像控件一样,在XML文件里面声明控件 然后控件就显示出来了

Fragment中的控件的事件的处理:

注意:replace()实际是先清除容器里面的Fragment,调用remove方法,然后再执行添加当前的Fragment,add()方法。如果我们每一次都用replace()的话,那么会造成一个问题,就是每一次都会先将前一个先删除,后面一个才能添加上。 造成每一个都需要重新CreatView()那么这么做的话,如果连续不断的去切换的话就会造成卡顿现象,为了解决这个问题就引出了一个概念就是Fragment的优化

注意事项:当我们添加进一个Fragment后,然后再向这个container中添加哪个Fragment的话,那么前一个Fragment没有被杀掉,只是没有显示而已
将当前Fragment的界面显示至帧布局中

我们一般是在onActivityCreateed()方法中处理一些事务。在使用过程中我们要注意一下几点、:

使用工厂类

栈的存储模式:先进后出
Activity也有自己的回退栈

事务:指的是一系列指令的合集,这一系列的指令要么全部执行,要么都不执行

这个地方的id是ft.commit()的返回值,不是Fragment得id

④ 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

按照一般的思路,我们或许会这么做:首先,使用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,并且为了复用Fragment,所以基本上就是用show()和hide方法来复用Fragment。在Fragment从隐藏到显示,可能会做一些处理,例如数据重新请求加载等等,那么Fragment从隐藏到显示,会调用什么方法呢?下面先看看具体的代码实现:

[java] view plain
FragmentTransaction transaction = fragmentManager.beginTransaction();
Fragment fragment;//
//隐藏 Fragment
if (fragment!= null) {
transaction.hide(fragment);
}
//显示、加载Fragment
if (fragment == null) {
// 如果fragment为空,则创建一个并添加到界面上
fragment = new AllFragment();
transaction.add(R.id.seckilling_fl, fragment);
} else {
// 如果Fragment不为空,则直接将它显示出来
transaction.show(fragment);
}
当Fragment 从隐藏切换至显示的时候,不会调用onResume(),Fragment 的onResume()是Fragment 和它的宿主在切换时才会调用的,而Fragment 之前切换时,不会调用onResume()方法,仔细查看发现Fragment 之前切换,Fragment 从隐藏切换至显示,会调用onHiddenChanged(boolean
hidden)方法

⑦ android中Fragment的切换方法。

需要做的准备
新建一个android项目,主Activity命名为MainActivity
创建三个Fragment1 Fragment2 Fragment3
为三个Fragment创建三个布局文fragment1.xml、fragment2.xml、fragment3.xml
布局 activity_main.xm
fragment1.xml样例

Fragment1样例

另外的可以根据样例进行修改
activity_main.xml内容

activity打开时需要显示一个fragment,也就是需要先向容器中添加一个fragment

这是就能显示第二个fragment了,那么如何切换不同的fragment呢,切换的过程如下
开启事务
调用事务的replace方法,将当前容器的fragment替换为新的fragment
提交事务

注意上图红框中的addToBackStack方法,很多人都不是很清楚这个方法的实际作用,说一下程序运行时候的现象你就明白了
初始化时显示的是 fragment2
实践1 :fragment2------点击按钮frag1-----按返回键--------退出应用
实践2: fragment2-----点击按钮frag3 -----按返回键--------返回到fragment2
为啥会出现上面的情况,原因就是切换到fragment3时,调用了addToBackStack方法,这时会将fragment2先入栈,然后再切换到fragment3,按返回键的时候fragment3销毁,fragment2出栈显示,而切换到fragme1时没有将fragme2入栈,所以fragment2就直接销毁了,再按返回键就直接退出应用了

热点内容
如何用学习机配置的笔写字 发布:2025-02-05 04:09:15 浏览:392
5岁编程 发布:2025-02-05 04:06:21 浏览:648
jdk17linux64位 发布:2025-02-05 04:01:01 浏览:466
人脸验证算法 发布:2025-02-05 03:54:45 浏览:358
解压驿站 发布:2025-02-05 03:54:44 浏览:598
php系统下载 发布:2025-02-05 03:54:43 浏览:143
android相机图片 发布:2025-02-05 03:54:09 浏览:842
php小票打印机 发布:2025-02-05 03:42:00 浏览:613
vivo安卓手机如何连接蓝牙耳机 发布:2025-02-05 03:40:30 浏览:957
youtubeapp缓存 发布:2025-02-05 03:33:10 浏览:747