android – 为什么ViewRecycler会在onMeasure上爆炸

android – 为什么ViewRecycler会在onMeasure上爆炸,第1张

概述我在一个Fragment中使用了CardView的ViewRecycler,它是ActionBarActivity上ViewPager的一部分.所有这些来自支持库. 当我尝试打开应用程序时,它会崩溃并出现以下异常.我错过了一个已知的问题或解决方案吗? java.lang.NullPointerException at android.support.v7.widget.Recycl 我在一个Fragment中使用了CardVIEw的VIEwRecycler,它是ActionBaractivity上VIEwPager的一部分.所有这些来自支持库.

当我尝试打开应用程序时,它会崩溃并出现以下异常.我错过了一个已知的问题或解决方案吗?

java.lang.NullPointerException        at androID.support.v7.Widget.RecyclerVIEw.onMeasure(RecyclerVIEw.java:1764)        at androID.vIEw.VIEw.measure(VIEw.java:16736)        at androID.support.v4.vIEw.VIEwPager.onMeasure(VIEwPager.java:1456)        at androID.vIEw.VIEw.measure(VIEw.java:16736)        at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:5178)        at androID.Widget.FrameLayout.onMeasure(FrameLayout.java:310)        at androID.vIEw.VIEw.measure(VIEw.java:16736)        at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:5178)        at androID.support.v7.internal.Widget.ActionbarOverlayLayout.onMeasure(ActionbarOverlayLayout.java:453)        at androID.vIEw.VIEw.measure(VIEw.java:16736)        at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:5178)        at androID.Widget.FrameLayout.onMeasure(FrameLayout.java:310)        at androID.vIEw.VIEw.measure(VIEw.java:16736)        at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:5178)        at androID.Widget.linearLayout.measureChildBeforeLayout(linearLayout.java:1404)        at androID.Widget.linearLayout.measureVertical(linearLayout.java:695)        at androID.Widget.linearLayout.onMeasure(linearLayout.java:588)        at androID.vIEw.VIEw.measure(VIEw.java:16736)        at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:5178)        at androID.Widget.FrameLayout.onMeasure(FrameLayout.java:310)        at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.onMeasure(PhoneWindow.java:2392)        at androID.vIEw.VIEw.measure(VIEw.java:16736)        at androID.vIEw.VIEwRootImpl.performMeasure(VIEwRootImpl.java:2095)        at androID.vIEw.VIEwRootImpl.measureHIErarchy(VIEwRootImpl.java:1208)        at androID.vIEw.VIEwRootImpl.performTraversals(VIEwRootImpl.java:1394)        at androID.vIEw.VIEwRootImpl.doTraversal(VIEwRootImpl.java:1095)        at androID.vIEw.VIEwRootImpl$TraversalRunnable.run(VIEwRootImpl.java:6010)        at androID.vIEw.Choreographer$CallbackRecord.run(Choreographer.java:799)        at androID.vIEw.Choreographer.doCallbacks(Choreographer.java:599)        at androID.vIEw.Choreographer.doFrame(Choreographer.java:559)        at androID.vIEw.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:784)        at androID.os.Handler.handleCallback(Handler.java:733)        at androID.os.Handler.dispatchMessage(Handler.java:95)        at androID.os.Looper.loop(Looper.java:157)        at androID.app.ActivityThread.main(ActivityThread.java:5872)        at java.lang.reflect.Method.invokeNative(Native Method)        at java.lang.reflect.Method.invoke(Method.java:515)        at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:852)        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:668)        at dalvik.system.NativeStart.main(Native Method)

我已尝试过各种建议,例如在我有relativeLayout的地方使用linearLayouts,但没有任何帮助,所以我还原了.我的布局和代码如下

摇篮

dependencIEs {    compile filetree(dir: 'libs',include: ['*.jar'])    compile 'com.androID.support:appcompat-v7:22.0.0'    compile 'com.androID.support:cardvIEw-v7:21.0.+'    compile 'com.androID.support:recyclervIEw-v7:21.0.+'}

活动

public class LaunchActivity extends ActionBaractivity {    private SectionsPagerAdapter mSectionsPagerAdapter;    private VIEwPager mVIEwPager;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_launch);        mSectionsPagerAdapter = new SectionsPagerAdapter(this,getSupportFragmentManager());        mVIEwPager = (VIEwPager) findVIEwByID(R.ID.pager);        mVIEwPager.setAdapter(mSectionsPagerAdapter);    }    ...}

活动布局

<androID.support.v4.vIEw.VIEwPager xmlns:androID="http://schemas.androID.com/apk/res/androID"xmlns:tools="http://schemas.androID.com/tools" androID:ID="@+ID/pager"androID:layout_wIDth="match_parent" androID:layout_height="match_parent"tools:context="com.me.LaunchActivity" />

分段

public class RotaFragment extends Fragment {    private RecyclerVIEw mCardRecycler;    public static RotaFragment newInstance() {        ...    }    public RotaFragment() { }    @OverrIDe    public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) {        VIEw rootVIEw = inflater.inflate(R.layout.fragment_rota,container,false);        mCardRecycler = (RecyclerVIEw) rootVIEw.findVIEwByID(R.ID.card_recycler);        return rootVIEw;   }    @OverrIDe    public voID onVIEwCreated(VIEw vIEw,@Nullable Bundle savedInstanceState) {        super.onVIEwCreated(vIEw,savedInstanceState);        List<WorkingFortnight> dummy = new ArrayList<>();        ....        mCardRecycler.setLayoutManager( new linearlayoutmanager(getActivity()) );        mCardRecycler.setAdapter(new RotaCardAdapter(dummy));    }}

片段布局

<androID.support.v7.Widget.RecyclerVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:ID="@+ID/card_recycler"    androID:background="@drawable/activity_bg"    androID:paddingleft="@dimen/activity_horizontal_margin" androID:paddingRight="@dimen/activity_horizontal_margin"    androID:paddingtop="@dimen/activity_vertical_margin" androID:paddingBottom="@dimen/activity_vertical_margin"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"/>

适配器(在VIEwRecycler上设置以设置CardVIEws)

public class RotaCardAdapter extends RecyclerVIEw.Adapter<RotaCardAdapter.RotaVIEwHolder> {    private List<WorkingFortnight> mRotas;    public RotaCardAdapter(List<WorkingFortnight> rotas) {        mRotas = rotas;    }    @OverrIDe    public voID onAttachedToRecyclerVIEw(RecyclerVIEw recyclerVIEw) {        super.onAttachedToRecyclerVIEw(recyclerVIEw);    }    @OverrIDe    public RotaVIEwHolder onCreateVIEwHolder(VIEwGroup parent,int vIEwType) {        VIEw v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rota_card,parent,false);        return new RotaVIEwHolder(v);    }    @OverrIDe    public voID onBindVIEwHolder(RotaVIEwHolder holder,int position) {        WorkingFortnight rota = mRotas.get(position);        holder.setHours( ... );    }    public class RotaVIEwHolder extends RecyclerVIEw.VIEwHolder {        private TextVIEw mCaption;        private Rotalistadapter mlistadapter;        public RotaVIEwHolder(VIEw v) {            super(v);            ...            mList.setAdapter(...);        }        ...     }

适配器视图(卡)

<?xml version="1.0" enCoding="utf-8"?><androID.support.v7.Widget.CardVIEw    xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:card_vIEw="http://schemas.androID.com/apk/res-auto"    androID:ID="@+ID/card_vIEw"    androID:layout_gravity="center"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    card_vIEw:elevation="3dp"    card_vIEw:cardBackgroundcolor="@color/card"    card_vIEw:cardCornerRadius="4dp">    <relativeLayout androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:padding="4dp">        <ImageVIEw androID:ID="@+ID/card_image"            androID:scaleType="centerCrop"            androID:src="@drawable/wk01"            androID:contentDescription="@string/label_card"            androID:layout_alignParenttop="true"            androID:layout_wIDth="fill_parent"            androID:layout_height="128dp" />        <TextVIEw androID:ID="@+ID/card_caption"                androID:layout_aligntop="@+ID/card_image"            androID:layout_alignRight="@+ID/card_image"            androID:layout_margintop="4dp"            androID:layout_marginRight="8dp"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content" />        <ListVIEw androID:ID="@+ID/card_rota"            androID:layout_wIDth="fill_parent"            androID:layout_height="fill_parent">        </ListVIEw>    </relativeLayout></androID.support.v7.Widget.CardVIEw>

我意识到这是一个复杂的嵌套布局,但我希望有人知道我在这里做过的一些问题,也许某些视图不能嵌套,但我的搜索中没有任何内容,简化测试的东西没有帮助至今.

解决方法 出现空指针,因为Recycler视图的布局管理器为null.

您必须尽快设置布局管理器:

@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater,Bundle savedInstanceState) {    VIEw rootVIEw = inflater.inflate(R.layout.fragment_rota,false);    mCardRecycler = (RecyclerVIEw) rootVIEw.findVIEwByID(R.ID.card_recycler);    List<WorkingFortnight> dummy = new ArrayList<>();    ....    mCardRecycler.setLayoutManager( new linearlayoutmanager(MyApplication.getApplicationContext()) );    mCardRecycler.setAdapter(new RotaCardAdapter(dummy));    return rootVIEw;}
总结

以上是内存溢出为你收集整理的android – 为什么ViewRecycler会在onMeasure上爆炸全部内容,希望文章能够帮你解决android – 为什么ViewRecycler会在onMeasure上爆炸所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1125491.html

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

发表评论

登录后才能评论

评论列表(0条)

保存