android–onCreateView未在ViewPager中使用Fragment调用

android–onCreateView未在ViewPager中使用Fragment调用,第1张

概述我正在使用ACL中的ViewPager来显示几个片段.首先,这些片段所有ListFragments都包含一个列表.我正在尝试模仿2列表,因此列表中的每个元素都包含另外两个对象的列表.我希望每个单元格都可以长按(不是整个列表项),因此我实现了自己的ColumnLayout(也许它应该被称为CellLayout).每个列表项包含两个可长按的ColumnLayou

我正在使用ACL中的VIEwPager来显示几个片段.首先,这些片段所有ListFragments都包含一个列表.我正在尝试模仿2列表,因此列表中的每个元素都包含另外两个对象的列表.我希望每个单元格都可以长按(不是整个列表项),因此我实现了自己的ColumnLayout(也许它应该被称为CellLayout).每个列表项包含两个可长按的ColumnLayouts,并实现getContextMenuInfo()以返回有关长按哪个实体的信息.此方法查找VIEwPager,请求当前片段,然后调用片段以从长时间单击的视图中返回实体ID.为了获得片段需要执行的正确行:

getListVIEw().getpositionForVIEw(v)

这就是问题开始的地方.有时getListVIEw()会抛出IllegalStateException,说“尚未创建内容视图”.即onCreateVIEw(…)尚未调用.这有时仅在应用程序恢复时发生.今天,我设法通过在“设置”中启用“不要保留活动”选项来重新产生问题.我的galaxy Nexus上的开发人员选项.我启动应用程序,按Home,然后从最近的应用程序菜单重新打开应用程序,现在,如果我长按ListvIEw中的任何单元格,则抛出此异常.通过一些调试输出,我设法验证从未调用onCreateVIEw.这有点奇怪,因为整个VIEwPager及其Fragment及其ListVIEw及其单元格项目都被绘制出来了!

我在#androID-dev上被告知ACL中的ListFragment不支持自定义布局,所以我重新实现了我的androID.support.v4.app.Fragment而没有使用ListFragment,但这没有帮助.

简短摘要:我有一个自定义布局,处理长按布局的事件,目的是创建一个MenuInfo对象,其中包含有关按下的单元格中的权限的信息.为了找到布局中包含的实体,最终会调用ListvIEw.getpositionForVIEw(VIEw v),有时会导致IllegalStateException.

在这里我的自定义布局(也许有一种更简单的方法来获取VIEwPager而不是在视图层次结构中挖掘):

package org.remotestick;import androID.content.Context;import androID.support.v4.vIEw.VIEwPager;import androID.util.AttributeSet;import androID.vIEw.ContextMenu.ContextMenuInfo;import androID.vIEw.VIEw;import androID.Widget.linearLayout;public class ColumnLayout extends linearLayout {    public ColumnLayout(Context context,AttributeSet attrs) {        super(context,attrs);    }    public ColumnLayout(Context context) {        super(context);    }    @OverrIDe    protected ContextMenuInfo getContextMenuInfo() {        int itemTypeID = getChildAt(0).getID();        int positionTypeID = getID();        VIEw currentVIEw = this;        VIEwPager vIEwPager = null;        while(currentVIEw.getParent() != null) {            currentVIEw = (VIEw) currentVIEw.getParent();            if(currentVIEw.getID() == R.ID.pager) {                vIEwPager = (VIEwPager) currentVIEw;                break;            } else if (currentVIEw.getID() == R.ID.rootLayout)                break;        }        if(vIEwPager == null)            return null;        WorkspaceAdapter adapter = (WorkspaceAdapter) vIEwPager.getAdapter();        Pair

而这里是片段的片段:

public class EntitytableFragment extends Fragment implements TelldusEntitychangelistener {    protected static final String ARG_Title = "Title";    protected MatrixAdapter mAdapter;    protected ProgressVIEwer mProgressVIEwer;    protected MatrixFilter mFilter;    protected Handler mHandler = new Handler();    protected RemoteStickData db;    public boolean onAttach = false;    public boolean onCreateVIEw = false;    private ListVIEw ListVIEw;    public static EntitytableFragment newInstance(String Title) {        EntitytableFragment f = new EntitytableFragment();        Bundle args = new Bundle();        args.putString(ARG_Title,Title);        f.setArguments(args);        return f;    }    @OverrIDe    public voID onAttach(SupportActivity activity) {        super.onAttach(activity);        onAttach = true;            try {            mProgressVIEwer = (ProgressVIEwer) activity;            mAdapter = new MatrixAdapter(getActivity(),mProgressVIEwer,new ArrayList

恢复应用程序(如果活动被销毁)并不奇怪,VIEwPager及其Fragments及其ListVIEw及其自定义布局都被绘制出来.但是我得到了IllegalStateException,如果我长按ListvIEw中的任何一个单元格,那么该视图还没有被创建?

编辑/
实际上,一个Log.d(Constants.TAG,“onCreateVIEw !!!!”); onCreateVIEw中的输出显示,我第一次启动应用程序时会调用两次方法(VIEwPager中每个Fragment一次),但是当应用程序恢复时,它永远不再被调用!这是一个错误还是我可能做错了什么?最佳答案关键部分似乎是FragmentPagerAdapter(我没有包含).调试显示重新创建活动时不调用getItem().碎片是通过其他方式重新创建的.这意味着我的FragmentPagerAdapter实现对FragmentManager中的片段有错误的引用.

所以相反,当我需要查找一个片段时,我使用findFragmentByTag()(在FragmentManager上)使用makeFragmentname()来获取相应的标记名称.这是添加片段时FragmentPagerAdapter使用的方法.但不确定这是否是一种安全的方法.

总结

以上是内存溢出为你收集整理的android – onCreateView未在ViewPager中使用Fragment调用全部内容,希望文章能够帮你解决android – onCreateView未在ViewPager中使用Fragment调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1139892.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)