创建fragment的适配器的时候,构造函数传入content参数

来源:互联网 发布:java security 编辑:程序博客网 时间:2024/06/03 23:06

菜鸟一枚,遇到问题就当笔记来记,大神看见还望告知原理。

经常越到这个麻烦,比如我的fragment是一个listview,要放到viewpager的一个页面当中,adapter的构造函数是这样:

public MyGridAdapter(Context context, String[] text, int[] images) {        super();        this.mContext = context;        this.img_text = text;        this.imgs = images;    }

如果该这个构造函数为这样:

public MyGridAdapter(Fragment fragment, String[] text, int[] images) {        super();        this.mContext = context;        this.img_text = text;        this.imgs = images;    }    //text和images是要放到Listview里面的数据

则在adapter里面加载fragment(listview)的item布局里面就会遇到问题,不能使用下面的方法来加载自布局。

LayoutInflater.from(Context).inflate( R.layout.listview_item, parent, false);

我原来会傻乎乎的把fragment当context传进去,发现类型不对,现在使用的是下面这种方法(getActivity().getApplicationContext())取得fragment的context。不知道还有没有别的方法。

adapter = new Adapter(getActivity().getApplicationContext(), img_text, imgs);

:Fragment中有一个getActivity()的方法。这个方法会返回当前Fragment所附加的Activity。当fragment生命周期结束并销毁时,getActivity()返回的会是null。

总结:对context不了解,字面上看只知道他是上下文的意思,查了一下关于它的介绍:
(1)在android中context可以作很多操作,但是最主要的功能是加载和访问资源。在android中有两种context:一种是 application context,一种是activity context。通常我们在各种类和方法间传递的是activity context。下面是查到的这两个的区别:
这是两种不同的context,也是最常见的两种。application context的生命周期与Application的生命周期相关的,context随着Application的销毁而销毁,伴随application的一生,与activity的生命周期无关。第二种activity context跟Activity的生命周期是相关的,但是对一个Application来说,Activity可以销毁几次,那么属于Activity的context就会销毁多次。至于用哪种context,得看应用场景,感觉用Activity的context好一点,不过也有的时候必须使用Application的context。application context可以通过
Context.getApplicationContext或者Activity.getApplication方法获取.
还有就是,在使用context的时候,小心内存泄露,防止内存泄露,注意一下几个方面:
 1. 不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的
 2. 对于生命周期长的对象,可以使用application context
 3. 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化
(2)初学,对 LayoutInflater会用但不知道原理,可以看一下郭霖的文章:
 LayoutInflater原理分析
(3)对于context更全面的分析博客context详解
 
 

0 0
原创粉丝点击