0

如果我想在我的 ArrayAdapter 中重用 Fragment,那效率低吗?

也就是说,在 my 中ArrayAdapter,mygetView()看起来像这样:

public View getView(final int position, View convertView, ViewGroup parent) {
        UserFragment userFragment = new UserFragment();
        return userFragment.getView();
}

我问,因为通常在getView()方法中,它看起来像这样:

public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.user, null);
            ...//do stuff
        }

每次调用 getView() 时创建 Fragment 是否效率低下?

4

2 回答 2

2

首先,Fragment有它自己的生命周期,比如Activity's onCreateonDestory等等。
所以如果你UserFragment userFragment = new UserFragment()在里面做getView(),每次你滚动's 的时候ListView,都会创建很多不同Fragment的 's 实例,而向外滚动的会是 GC。这要花很多钱。

其次,您没有重用视图。每个Fragment实例都有自己的视图结构,因此每次userFragment.getView()都会返回一个全新的视图。View

基本上不建议使用Fragmentinside ListView。使用convertView效率更高。

于 2013-10-04T07:58:26.087 回答
1

AFragment由 a拥有的FragmentManager(通过FragmentTransactions)管理Activity。或者你可以在片段中有片段。

AListView单独管理自己的视图,并且正在回收这些视图,因此当您滚动时,您将进入convertView您应该使用的视图。

底线是:片段仅驻留在活动或其他片段中,而视图(ListView是 的后代View)留在片段或活动中。

所以:Is it inefficient to create a Fragment each time the getView() is called?。我看不出你为什么要这样做。事实上,做俯卧撑比在 Views 中使用 Fragment 更有帮助 1000 倍。没有一篇好的技术文章有人讨论这些。

于 2013-10-04T07:19:58.910 回答