2

当通过 Viewpagers 滑动它的工作完美时,我在BaseAdaptergetView()方法上使用ViewPagers的setId()方法完成了。

实现代码类似于这个线程,我在这里找到: On This Post

在创建每个 ViewPager 的对象后添加 setId(position+1)。

在此处输入图像描述

但是当我开始滚动列表(水平)时,应用程序崩溃了,显示以下 Logcat 中的错误:

06-18 21:06:55.020: E/AndroidRuntime(1928): 致命异常: main 06-18 21:06:55.020: E/AndroidRuntime(1928): android.content.res.Resources$NotFoundException: 找不到资源ID #0x7 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.content.res.Resources.getResourceName(Resources.java:1653) 06-18 21:06:55.020: E/AndroidRuntime(1928 ): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.support.v4.app.FragmentManagerImpl.moveToState( FragmentManager.java:1088) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.support .v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 06-18 21:06:55.020: E/AndroidRuntime(1928): atandroid.support.v4.view.ViewPager.populate(ViewPager.java:1064) 06 -18 21:06:55.020: E/AndroidRuntime(1928): 在 android.support.v4.view.ViewPager.populate(ViewPager.java:911) 06-18 21:06:55.020: E/AndroidRuntime(1928):在 android.support.v4.view.ViewPager.setAdapter(ViewPager.java:440) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 com.example.democardswipelistview.CustomSwipeAdapter.getView(CustomSwipeAdapter.java: 72) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.widget.AbsListView。获得视图(AbsListView.java:2012) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.widget.ListView.makeAndAddView(ListView.java:1772) 06-18 21:06:55.020: E/ AndroidRuntime(1928): 在 android.widget.ListView.fillUp(ListView.java:705) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.widget.ListView.fillGap(ListView.java:645 ) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.widget.AbsListView.trackMotionScroll(AbsListView.java:4546) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android .widget.AbsListView$FlingRunnable.run(AbsListView.java:3813) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.os.Handler.handleCallback(Handler.java:605) 06-18 21 :06:55.020: E/AndroidRuntime(1928): 在 android.os.Handler.dispatchMessage(Handler.java:92) 06-18 21:06:55.020: E/AndroidRuntime(1928):在 android.os.Looper.loop(Looper.java:137) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 android.app.ActivityThread.main(ActivityThread.java:4424) 06-18 21 :06:55.020: E/AndroidRuntime(1928): at java.lang.reflect.Method.invokeNative(Native Method) 06-18 21:06:55.020: E/AndroidRuntime(1928): at java.lang.reflect.Method .invoke(Method.java:511) 06-18 21:06:55.020: E/AndroidRuntime(1928): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 06-18 21 :06:55.020: E/AndroidRuntime(1928): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 dalvik。 system.NativeStart.main(本机方法)main(ActivityThread.java:4424) 06-18 21:06:55.020: E/AndroidRuntime(1928): at java.lang.reflect.Method.invokeNative(Native Method) 06-18 21:06:55.020: E/AndroidRuntime (1928): 在 java.lang.reflect.Method.invoke(Method.java:511) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller。运行(ZygoteInit.java:784)06-18 21:06:55.020:E/AndroidRuntime(1928):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)06-18 21:06: 55.020:E/AndroidRuntime(1928):在 dalvik.system.NativeStart.main(本机方法)main(ActivityThread.java:4424) 06-18 21:06:55.020: E/AndroidRuntime(1928): at java.lang.reflect.Method.invokeNative(Native Method) 06-18 21:06:55.020: E/AndroidRuntime (1928): 在 java.lang.reflect.Method.invoke(Method.java:511) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller。运行(ZygoteInit.java:784)06-18 21:06:55.020:E/AndroidRuntime(1928):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)06-18 21:06: 55.020:E/AndroidRuntime(1928):在 dalvik.system.NativeStart.main(本机方法)E/AndroidRuntime(1928): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 com.android.internal .os.ZygoteInit.main(ZygoteInit.java:551) 06-18 21:06:55.020: E/AndroidRuntime(1928): at dalvik.system.NativeStart.main(Native Method)E/AndroidRuntime(1928): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 06-18 21:06:55.020: E/AndroidRuntime(1928): 在 com.android.internal .os.ZygoteInit.main(ZygoteInit.java:551) 06-18 21:06:55.020: E/AndroidRuntime(1928): at dalvik.system.NativeStart.main(Native Method)

4

1 回答 1

7

好的,两天后,我能够解决类似的问题。

首先不要坚持你ViewPagergetView()。我的意思是你不应该打电话convertView.setTag(holder);or holder = (ViewHolder)convertView.getTag()。只需删除检查是否convertView为空的 if 语句。然后完全删除 else 语句块。

要进行的另一个更改(这不是原因之一)是您需要优化设置 ID 的方式。取而代之的是setId(position+1),在您的 values 文件夹中创建一个 Ids.xml 文件,然后在该文件中,放入:

<?xml version="1.0" encoding="utf-8"?>

<resources>
  <!-- use to generate non-conflicting ids for the viewpager -->

  <item name="viewpager_id_base" type="id"/>
</resources>

然后在你的getView()方法中替换setId(position+1)setId(R.id.viewpager_id_base + position)

进行上述更改后,列表不会崩溃,但在您将项目滚动到屏幕后它会消失。这是解决方法:

确保您的自定义PageAdapter扩展FragmentStatePagerAdapter,而不是FragmentPagerAdapter. 这将正确地破坏视图并触发 onCreateView()。

于 2013-07-23T21:22:25.857 回答