问题
When Swipe through Viewpagers its Working Perfectly which i had done using setId() method for ViewPagers on getView() method of BaseAdapter.
Code Of Implementation is similar to this thread, which i found here: On This Post
Just added setId(position+1) after creating each ViewPager's Object.
But when i start scrolling through List (Horizontally) Application is getting crashed showing below Error in Logcat:
06-18 21:06:55.020: E/AndroidRuntime(1928): FATAL EXCEPTION: main 06-18 21:06:55.020: E/AndroidRuntime(1928): android.content.res.Resources$NotFoundException: Unable to find resource 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(Native Method)
回答1:
Ok so after 2 days, I was able to solve a similar issue like this.
First do not persist your ViewPager in the getView(). What I mean by this is that you shouldn't call convertView.setTag(holder); or holder = (ViewHolder)convertView.getTag(). Just remove the if statement that checks if convertView is null. Then completely remove the else statement block.
Another change to make (this is not one of the causes) is you need to optimize the way you set the Ids.
Instead of setId(position+1), make an Ids.xml file in your values folder, then inside that file, put this:
<?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>
Then in your getView() method replace setId(position+1) with setId(R.id.viewpager_id_base + position)
After the above change, the list will not crash, but it will disappear after you scroll the item off screen. Here is the fix for that:
Make sure your Custom PageAdapter extends FragmentStatePagerAdapter, not FragmentPagerAdapter. This will properly destroy the views and trigger the onCreateView().
来源:https://stackoverflow.com/questions/17173545/multiple-viewpagers-inside-single-listview-is-crashing