导航:首页 > 操作系统 > android关闭fragment

android关闭fragment

发布时间:2022-06-25 11:20:56

❶ 关于android Fragment的问题

1、概述
首先我们简单回顾一下,相信大家对Fragment的都不陌生,对于Fragment的使用,一方面Activity需要在布局中为Fragment安排位置,另一方面需要管理好Fragment的生命周期。Activity中有个FragmentManager,其内部维护fragment队列,以及fragment事务的回退栈。
一般情况下,我们在Activity里面会这么添加Fragment:
[java] view plain 在CODE上查看代码片派生到我的代码片
public class MainActivity extends FragmentActivity
{

private ContentFragment mContentFragment ;

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

FragmentManager fm = getSupportFragmentManager();
mContentFragment = (ContentFragment) fm.findFragmentById(R.id.id_fragment_container);

if(mContentFragment == null )
{
mContentFragment = new ContentFragment();
fm.beginTransaction().add(R.id.id_fragment_container,mContentFragment).commit();
}

}

}

针对上面代码,问两个问题:
1、为什么需要判null呢?
主要是因为,当Activity因为配置发生改变(屏幕旋转)或者内存不足被系统杀死,造成重新创建时,我们的fragment会被保存下来,但是会创建新的FragmentManager,新的FragmentManager会首先会去获取保存下来的fragment队列,重建fragment队列,从而恢复之前的状态。
2、add(R.id.id_fragment_container,mContentFragment)中的布局的id有何作用?
一方面呢,是告知FragmentManager,此fragment的位置;另一方面是此fragment的唯一标识;就像我们上面通过fm.findFragmentById(R.id.id_fragment_container)查找~~
好了,简单回顾了一下基本用法,具体的还请参考上面的博客或者其他资料,接下来,介绍一些使用的意见~~

2、Fragment Arguments
下面描述一个简单的场景,比如我们某个按钮触发Activity跳转,需要通过Intent传递参数到目标Activity的Fragment中,那么此Fragment如何获取当前的Intent的值呢?
有哥们会说,这个简单?看我的代码(问题代码):
[java] view plain 在CODE上查看代码片派生到我的代码片
public class ContentFragment extends Fragment
{

private String mArgument ;
public static final String ARGUMENT ="argument";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

mArgument = getActivity().getIntent().getStringExtra(ARGUMENT);

}

我们直接在Fragment的onCreate中,拿到宿主Activty,宿主Activity中肯定能通过getIntent拿到Intent,然后通过get方法,随意拿参数~~
这么写,功能上是实现了,但是呢?存在一个大问题:我们用Fragment的一个很大的原因,就是为了复用。你这么写,相当于这个Fragment已经完全和当前这个宿主Activity绑定了,复用直接废了~~~所以呢?我们换种方式,推荐使用arguments来创建Fragment。
[java] view plain 在CODE上查看代码片派生到我的代码片
public class ContentFragment extends Fragment
{

private String mArgument;
public static final String ARGUMENT = "argument";

@Override
public void onCreate(Bun www.hbbz08.com dle savedInstanceState)
{
super.onCreate(savedInstanceState);
// mArgument = getActivity().getIntent().getStringExtra(ARGUMENT);
Bundle bundle = getArguments();
if (bundle != null)
mArgument = bundle.getString(ARGUMENT);

}

/**
* 传入需要的参数,设置给arguments
* @param argument
* @return
*/
public static ContentFragment newInstance(String argument)
{
Bundle bundle = new Bundle();
bundle.putString(ARGUMENT, argument);
ContentFragment contentFragment = new ContentFragment();
contentFragment.setArguments(bundle);
return contentFragment;
}

给Fragment添加newInstance方法,将需要的参数传入,设置到bundle中,然后setArguments(bundle),最后在onCreate中进行获取;
这样就完成了Fragment和Activity间的解耦。当然了这里需要注意:
setArguments方法必须在fragment创建以后,添加给Activity前完成。千万不要,首先调用了add,然后设置arguments。

❷ Android Fragment怎么强制销毁

android fragment的生命周期是随着绑定的activity的,所以要强制销毁的话,可以把ativity杀死。如果不需要fragment你可以先hide隐藏掉即可。

❸ android 依次打开多个fragment怎么关闭相对应的

你可以给ViewPager里面放View,比如说一个空的FrameLayout,当你划过去后,给这个FrameLayout绑定Fragment,这时候Fragment才会去加载 查看原帖>>

❹ android 从viewpager中删除一个fragment的方法怎么解决 在线等

为了解决彻底删除fragment,我们要做的是:
1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就一直在内存中,在这个过程中无论你怎么刷新,清除都是无用的,直至程序退出; 后者 可以满足我们的需求。
2.我们可以重写Adapter的方法--getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可。
[java] view plain
以下为引用内容:
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return PagerAdapter.POSITION_NONE;
}
我最后的代码:

[java] view plain
package com.yang.Adapter;

import java.util.ArrayList;

import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;

public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
private static final String TAG = "MyFragmentPagerAdapter";
// private ArrayList<OpilistItem> lists;
private ArrayList<Fragment> mList;
private Context mContext;

public MyFragmentPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.mContext = context;
mList = new ArrayList<Fragment>();
}

public void setLists(ArrayList<Fragment> lists) {
this.mList = lists;
}

public void UpdateList(ArrayList<Fragment> arrayList) {
this.mList.clear();
this.mList.addAll(arrayList);

notifyDataSetChanged();
}

@Override
public Fragment getItem(int arg0) {
// Fragment ft = null;
//
// ft = new DateShow(mContext);
// for (int i = 0; i < lists.get(arg0).openplayitem.size(); i++) {
// Log.i(TAG,
// "arg0=" + arg0 + "name="
// + lists.get(arg0).openplayitem.get(i).moviename);
// }
//
// Bundle args = new Bundle();
// args.putSerializable("date_title", lists.get(arg0).openplayitem);
// ft.setArguments(args);
// return ft;
return mList.get(arg0);
}

@Override
public int getCount() {

return mList.size();
}

@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return PagerAdapter.POSITION_NONE;
}
}

之前还有一个问题,就是在fragment中报空指针异常,是因为我要加载的动态加载的fragment只有一个,但是viewpager默认会去加载下一个,使得浏览流畅,从我注释的代码中可以看到,数据的传递是通过bundle,造成预加载的时候数据成空,造成空指针异常,解决的办法是在fragment的onCreateView方法中判断数据是否为空,然后再判断是不是生成并返回view。

❺ Android 开发 fragment中一个按钮实现关闭此fragment功能,监听事件是在Activit中写还是fragment中写

看你监听到后续处理,如果有activity逻辑处理就写在activity

❻ android应用关闭了 销毁了 但是fragment里边的handler还在运行 怎么回事

1、不要直接将Fragement写在XML文件里,这样会导致Fragment对象无法销毁,产生内存溢出。在代码动态的new 和add Fragement才是正确的做法。 2、使用抽屉方法,在XML文件里放两个LinearLayout,然后在代码中将Fragment加进这两个LinearLayout中

❼ android用什么方法可以直接让当前fragment消失

可以参考我的csdn博客上,可以使用fragmentmanager来进行管理,最后别忘了commit

❽ Android怎么finish掉Activity和fragment

首先如果你写了finish()并且位置正确,应该不会出现你说的那种情况,你可以贴出源代码看看。

fragment写finish():getActivity().finish()。

❾ android 怎样隐藏当前的fragement

解决方法 1:
您可以使用此方法要锁定或解锁抽屉: DrawerLayout.setDrawerLockMode(...) 。(也有两个其他版本的此方法,以指定特定抽屉锁模式)。若要锁定,使用 DrawerLayout.LOCK_MODE_LOCKED_CLOSED ; 要解除锁定,请使用DrawerLayout.LOCK_MODE_UNLOCKED 。
如果您正在使用 ActionBarDrawerToggle,您需要添加一些额外的代码以防止抽屉打开时他们单击 ActionBarDrawerToggle,如果你把锁抽屉。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// check lock mode before passing to ActionBarDrawerToggle
// I assume your drawer is on the left; if not, use Gravity.RIGHT
int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT);
if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED &&
mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle your other action bar items...

return super.onOptionsItemSelected(item);
}

阅读全文

与android关闭fragment相关的资料

热点内容
安装包加密有什么用 浏览:584
舍利子灵力算法 浏览:501
javacalendar天数 浏览:567
anyview阅读器java 浏览:361
怎么降为安卓10 浏览:996
javaweb程序设计郭 浏览:249
gm声望命令 浏览:486
pdf转换器电脑版免费 浏览:43
解压歌曲什么歌最好 浏览:153
诺贝尔pdf 浏览:969
云服务器快速安装系统原理 浏览:790
苹果腾讯管家如何恢复加密相册 浏览:117
手机软件反编译教程 浏览:860
sqlserver编程语言 浏览:650
gpa国际标准算法 浏览:238
服务器编程语言排行 浏览:947
怎么下载快跑app 浏览:968
小红书app如何保存视频 浏览:172
如何解开系统加密文件 浏览:811
linux切换root命令 浏览:283