在浏览浏览器时,使用 setId()方法完成 getView() getView()方法 > BaseAdapter
Code of Implementation类似于这个帖子,我在这里找到: On This Post
在创建每个ViewPager的对象后添加了setId(position + 1)。
但是,当我开始滚动列表(水平)应用程序崩溃时,显示Logcat中的错误:
06-18 21:06:55.020:E / AndroidRuntime(1928):致命异常:主要 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):at android.content.res.Resources.getResourceName(Resources.java:1653) 06-18 21:06:55.020:E / AndroidRuntime(1928):at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903) 06-18 21:06:55.020:E / AndroidRuntime(1928):at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 06-18 21:06:55.020:E / AndroidRuntime(1928):at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 06-18 21:06:55.020:E / AndroidRuntime(1928):at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 06-18 21:06:55.020:E / AndroidRuntime(1928):at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461) 06-18 21:06:55.020:E / AndroidRuntime(1928):at 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):at android.support.v4.view.ViewPager.populate(ViewPager.java:911)06-18 21:06:55.020:E / AndroidRuntime(1928):at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:440)06-18 21:06:55.020:E / AndroidRuntime(1928):at com.example.democardswipelistview.CustomSwipeAdapter.getView(CustomSwipeAdapter.java:72) 06-18 21:06:55.020:E / AndroidRuntime(1928):at android.widget.AbsListView.obtainView(AbsListView.java:2012)06-18 21:06:55.020:E / AndroidRuntime(1928):at android.widget.ListView.makeAndAddView(ListView.java:1772)06-18 21:06:55.020:E / AndroidRuntime(1928):at android.widget.ListView.fillUp(ListView.java:705)06-18 21:06:55.020: E / AndroidRuntime(1928):at android.widget.ListView.fillGap(ListView.java:645)06-18 21:06:55.020: E / AndroidRuntime(1928):at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4546) 06-18 21:06:55.020:E / AndroidRuntime(1928):at android.widget.AbsListView $ FlingRunnable.run(AbsListView.java:3813) 06-18 21:06:55.020:E / AndroidRuntime(1928):at android.os.Handler.handleCallback(Handler.java:605)06-18 21:06:55.020:E / AndroidRuntime(1928):at android.os.Handler.dispatchMessage(Handler.java:92)06-18 21:06:55.020:E / AndroidRuntime(1928):at android.os.Looper.loop(Looper.java:137)06-18 21:06:55.020: E / AndroidRuntime(1928):at 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):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)06-18 21:06:55.020:E / AndroidRuntime(1928):at dalvik.system.NativeStart.main(原生方法)
答案 0 :(得分:7)
好的,所以在2天后,我能够解决类似的问题。
首先不要将ViewPager
保留在getView()
中。我的意思是你不应该致电convertView.setTag(holder);
或holder = (ViewHolder)convertView.getTag()
。只需删除检查convertView
是否为null的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()。