当前位置: 首页 > 知识库问答 >
问题:

试图为DialogFragment中的ViewPager填充片段时的IllegalArgumentException

刘弘济
2023-03-14
03-14 16:44:11.989    3617-3617/com.mycompany.app.debug E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalArgumentException: No view found for id 0x7f090146 for fragment GuestProfileQuestionnaireStep1Fragment{5375fa28 #3 id=0x7f090146}
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:823)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
            at android.app.BackStackRecord.run(BackStackRecord.java:635)
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397)
            at android.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:437)
            at android.support.v13.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:167)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
            at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
            at android.view.View.measure(View.java:15172)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
            at android.view.View.measure(View.java:15172)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:15172)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:15172)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
            at android.view.View.measure(View.java:15172)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1075)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
            at android.view.Choreographer.doCallbacks(Choreographer.java:555)
            at android.view.Choreographer.doFrame(Choreographer.java:525)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

Activity-->DialogFragment(有一个)>ViewPager-->调用适配器,该适配器反过来调用多个片段。以下是一些相关代码:

public class GuestProfileQuestionnaireContainerDialogFragment
        extends DialogFragment  {

    @InjectView(R.id.guest_profile_questionnaire_pager) ViewPager mProfileQuestionnairePager;

    // ...

    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState) {
        View layoutView = inflater.inflate(R.layout.fragment_guest_profile_questionnaire_container,
                                           container,
                                           false);
        ButterKnife.inject(this, layoutView);

        // ...
        setupProfileQuestionnaire();

        return layoutView;
    }

    // ...

    private void setupProfileQuestionnaire() {
        mProfileQuestionnairePager.setAdapter(new GuestProfileQuestionnairePagerAdapter(getFragmentManager()));
    }
}
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:orientation="vertical"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <FrameLayout ...

    <TextView ...

    <android.support.v4.view.ViewPager
        android:id="@+id/guest_profile_questionnaire_pager"
        android:layout_height="match_parent"
        android:layout_width="match_parent"/>

</LinearLayout>
public class GuestProfileQuestionnairePagerAdapter
        extends FragmentStatePagerAdapter {

    public static final int TOTAL_NUM_OF_STEPS = 1;

    public GuestProfileQuestionnairePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return TOTAL_NUM_OF_STEPS;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                return GuestProfileQuestionnaireStep1Fragment.newInstance();
        }

        return null;
    }
}
public class GuestProfileQuestionnaireStep1Fragment
        extends Fragment {

    private GuestProfileQuestionnaireStep1Fragment() {
        super();
    }

    public static GuestProfileQuestionnaireStep1Fragment newInstance() {
        return new GuestProfileQuestionnaireStep1Fragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_guest_profile_questionnaire_step1,
                                container,
                                false);
    }
}

当我的视页为空时,我不会得到异常。所以基本上,当ViewPAger单独充气时,没有问题。然而,当我在ViewPager中返回一个实际片段时,我会得到异常。

共有1个答案

夏侯玄天
2023-03-14

这是一个非常有趣的问题。我正在写一份详细的解释....当我找到另一个堆栈溢出的答案时,有一个更好的解释。嗯!

这个链接指向一个非常相似的问题:

  • PopupWindow(或DialogFragment)内有片断的ViewPager-错误:未找到片断id的视图
    null
 类似资料:
  • 我找到的唯一解决办法就是打电话给 在显示父片段之后。这会以某种方式触发视图被重新创建并出现在屏幕上。不幸的是,这有时会导致在旧的观察器上处理两次调用的寻呼机适配器时出现异常。 有没有更好的办法做到这一点?我想我要问的是:

  • 我试图使用另一个片段中的数据填充我的Listview。 我可以从另一个片段获取数据,但当我尝试创建listview对象时,它返回null。 结果,该应用程序正在崩溃。 我从一个片段中获取用户的数据,然后从另一个片段中调用一个方法来传递数据。我正在第二个方法的poplist()方法中创建listview对象和数组适配器。但是,由于空指针异常,应用程序正在崩溃。请帮忙。 我尝试了以下方法,但不起作用

  • 我一直在使用View Pager的图片幻灯片,但是我无法使View Pager内部的图像视图填充View Pager内部水平和垂直的完整空间。知道怎么做吗? 我在我的页面适配器中尝试过这个 但还是没有运气:( 我的布局 null 我的PageAdapter

  • 我尝试使用onTabSelected来检测某个片段何时被选中,然后在接口的帮助下从该片段启动一个方法(下面的代码)。 但是,当使用Start方法时,在尝试更新TextView时会激发NullPointerException。start方法的代码是: 在以下行抛出异常: 是的,我已经在网上查过了所有可用的东西,但似乎没有任何东西对我有用。 非常感谢您的帮助!

  • 我正在考虑一个简单的例子,包括以下部分: Main活动:有编辑文本、按钮、viewPager 碎片A:什么都没有 碎片B:有文本视图 所以,在屏幕上,你可以滑动查看每个片段。我希望我的例子有这样一个功能:如果一个人在editText中写了一个文本,然后点击按钮,它就会出现在片段B中。 A使用notifyDatsetChanged()尝试了它,但不起作用。有人能帮忙吗?下面是我的全部代码: 主要活动

  • 问题内容: 我有一个活动,其中包含一个片段,在该片段中有一个按钮,当单击它时,会弹出一个对话框。 在此对话框中,有一个Viewpager,其中包含一些要显示的片段。 这是代码和错误,请您花宝贵的时间告诉我我哪里错了。非常感谢您的帮助。 MainActivity.class MyFragment.class PagerDialog.class 这是dialog.xml: 这是错误 问题答案: 我找到