android.content.res.Resources $ NotFoundException:无法找到资源ID#0xffffffff


71

我讨厌发布代码,并问为什么它不起作用,但是我现在很茫然。我试图在下面运行以下类,但在logcat中出现了一个我无法解释的异常。甚至谷歌搜索也收效甚微。也许我只是不了解生态系统,但是异常情况很少。我得到的异常如下:

03-06 21:50:43.031: E/AndroidRuntime(1013): FATAL EXCEPTION: main
03-06 21:50:43.031: E/AndroidRuntime(1013): android.content.res.Resources$NotFoundException: Unable to find resource ID #0xffffffff
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.content.res.Resources.getResourceName(Resources.java:1659)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1012)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.support.v4.view.ViewPager.populate(ViewPager.java:881)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1366)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.View.measure(View.java:15513)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.View.measure(View.java:15513)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.View.measure(View.java:15513)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.View.measure(View.java:15513)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.Choreographer.doFrame(Choreographer.java:532)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.os.Handler.handleCallback(Handler.java:725)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.os.Looper.loop(Looper.java:137)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at android.app.ActivityThread.main(ActivityThread.java:5039)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at java.lang.reflect.Method.invokeNative(Native Method)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at java.lang.reflect.Method.invoke(Method.java:511)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-06 21:50:43.031: E/AndroidRuntime(1013):     at dalvik.system.NativeStart.main(Native Method)
03-06 21:55:44.231: E/Trace(1033): error opening trace file: No such file or directory (2)

我尝试将ViewPager移至顶级内容(即setContent(pager)),但这似乎不起作用。欢迎任何输入。代码如下:

编辑*我简化了示例,但仍然遇到相同的问题。

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class AskQuestionActivity extends FragmentActivity
{
    private static LayoutParams MATCH_PARENT = new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT );

    @Override
    protected void onCreate( Bundle savedInstanceState )
    {
        super.onCreate( savedInstanceState );

        ViewPager pager = new ViewPager( this );
        pager.setAdapter( new FragmentPagerAdapter( getSupportFragmentManager() )
        {
            @Override
            public int getCount()
            {
                return 1;
            }

            @Override
            public Fragment getItem( int arg0 )
            {
                return new BoardFragment();
            }
        } );

        setContentView( pager );
    }

    public static class BoardFragment extends Fragment
    {
        @Override
        public View onCreateView( LayoutInflater inflater,
                                  ViewGroup container,
                                  Bundle savedInstanceState )
        {
            TextView textView = new TextView( getActivity() );
            textView.setText( "Board" );
            textView.setGravity( Gravity.CENTER );

            LinearLayout layout = new LinearLayout( getActivity() );
            layout.setLayoutParams( MATCH_PARENT );
            layout.addView( textView );

            return layout;
        }
    }
}

欢迎任何帮助。


我认为问题出在您显示的代码中。您是否正在使用任何XML布局文件?
埃里克

不,不是这种情况。除非我的清单可以派上用场(我知道,我应该将布局放在XML中,但我只是在玩些东西)。有一秒钟,我认为可能是因为我没有通过调用pager.setLayoutParam(params)来给viewpager设置大小。但这也没有解决问题。
维杰·夏尔马

1
当某种事物应被视为一种颜色时,它便被视为一种资源。不过,我看到的是,此代码中没有引用任何资源。(我认为在某处0xFFFFFFFF使用而不是android.R.color.white或类似名称。)我之所以建议使用XML,是因为堆栈跟踪不会链接回您的代码;而是将堆栈跟踪链接到您的代码。但可能是来自Fragment自动充气等原因。
埃里克

我实际上有一个不同的理论,我认为像实例化ViewPager一样会导致问题(PS,我将示例更新为更简单)。我有一种直觉,即FragmentManager做出了一些假设,即视图分页器将始终位于布局xml中,而不是通过编程方式传递的(就像我所做的那样)。我将尝试创建一个布局文件,看看是否可行。
Vijay Sharma

2
好的,不是我想永久保留这种不好的做法,但我只是将此行添加到了代码pager.setId(453543);中。而且似乎有效。.也许我关于需要ID的理论是正确的?我不知道。
Vijay Sharma

Answers:


85

因此,我将发布我认为是解决问题的方法。在上面的代码中添加一行后,给出ViewPager一个“随机” ID;它设法解决了我的问题。

起初,我坚信设置自己的ID是不正确的做法,但显然有合法的方法可以做到这一点。即通过创建一个ids.xml文件并让Android生态系统为您生成一个ID。我建议在此处此处查看这些SO帖子以获取更多信息。

否则,我会建议只创建您的布局XML文件,并得到ViewPager你的Activity(而不是编程实例化),但最终这一切都取决于你想要完成的任务。


我也解决了这个问题
-znat

5
谢谢!我永远不会想到ID是原因!
Exterminator13年

辉煌。也为我解决了。
斯科特,

1
@androiddeveloper我的猜测是,在支持库中,无论是设计使然还是作为错误,片段管理器都需要顶级视图组具有ID。如果您知道原因,请随时发布更新。
Vijay Sharma 2014年

2
如果您使用的是API 17或更高版本,则可以调用View.generateViewId()生成一个唯一的ID,该ID与布局文件生成的任何ID都不会冲突。
ReflexiveCode

22
ViewPager pager = new ViewPager(this);

需要设置资源ID

pager.setId(0x1000);

1

我在布局文件夹下的XML布局文件遇到了类似的问题。该代码曾经在eclipse中工作,但是当项目移至Android Studio时,我一直在获取android.content.res.Resources $ NotFoundException。

为了解决该问题,我最终重命名了导致问题并解决了该问题的XML文件。在此之前,我尝试重建项目,对XML文件进行修改,但没有任何效果。


1

完全一样的问题。我以编程方式在片段中生成了一个viewpager。当片段回到前台时,它崩溃了。

即使我已经为视图分页器生成了一个随机ID,它仍然崩溃。唯一的方法是为其分配固定的ID。奇怪的!


那是因为Fragments需要标签或ID。如果没有,则使用容器ID。如果容器没有ID,则碎片会崩溃
Urizev '16

是的,谢谢。为了避免此类问题,我使用ID生成器将ID分配给运行时以编程方式创建的每个项目。
NCHEN

0

我有同样的错误。我的原因是我的Adapter类具有一个额外的textView而没有匹配的imageView。我有7个TextView和6个ImageView。我花了几个小时才弄清一个简单的错误。


0

我遇到过同样的问题。问题是缺少布局文件。我已经将布局放在layout-xlarge文件夹中,但是没有放在layout文件夹中。因此,小屏幕平板电脑存在该问题。这可能会给一些人一个线索。


0

当我viewPager.setAdapter(adapter);仅在Android KitKat 4.4中设置adapter时,会遇到相同的异常。我尝试了几乎所有解决方案,但没有用。

就我而言,解决方案是将.xml文件drawable-nodpi移至drawable文件夹(其中包含一些SVG图像),Build -> Clean Project然后错误消失了。


0

我试图直接设置一个IntTextView

通过将值String设置为来解决TextView

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.