Articles of android viewpager

IllegalStateException:无法更改片段的标签是android:switcher now android:switcher

我的活动使用TabLayout + ViewPager 。 此处的选项卡和页面数量是动态的,具体取决于从服务器获取的数据。 崩溃是通过Crashlytics报道的,我无法复制它。 我的活动代码: @Override protected void onCreate(Bundle savedInstanceState) { boolean isAppRestarting = PrefUtils.getBoolean(“app_restarting”, false); if (isAppRestarting) { super.onCreate(null); this.savedInstanceState = null; } else { super.onCreate(savedInstanceState); this.savedInstanceState = savedInstanceState; } initSlidingTabs(); fetchSomeData(); // see onDataFetched() below } private void initSlidingTabs() { List sdsTabs = new ArrayList(); Logger.i(“There is saved instance state”); ArrayList […]

android:根据ViewPager中的每个片段更新ActionBar项目?

我在Action Bar中有一个标记/书签按钮,我希望根据ViewPager查看哪个Fragment来打开或关闭。 如果用户在ViewPager中标记片段,则将其设置为启用。 当用户滑动到下一个时,我希望操作栏按钮更新为未标记。 现在,我可以通过拥有两个菜单项来更改按钮的状态,并隐藏一个,单击时显示一个。 这是我的Activity中切换Action Bar按钮的代码: public boolean onOptionsItemSelected(MenuItem item) { int currentItem = mPager.getCurrentItem(); switch (item.getItemId()) { case R.id.menu_flag: mFlagged = true; supportInvalidateOptionsMenu(); return true; case R.id.menu_unflag: mFlagged = false; supportInvalidateOptionsMenu(); return true; } } @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item_flag = menu.findItem(R.id.menu_flag); MenuItem item_unflag = menu.findItem(R.id.menu_unflag); if (mFlagged) { //If […]

当Fragment被重新显示时,Fragment中的ViewPager丢失了它的内容

我有一个带有ViewPager的简单片段。 我正在使用最新的支持库,v4 rev18! 如果我第一次显示它,一切正常,如果我回去再次显示它,应用程序崩溃时出现以下exception: java.lang.NullPointerException at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:569) at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1281) at android.view.View.dispatchRestoreInstanceState(View.java:12043) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2688) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694) at android.view.View.restoreHierarchyState(View.java:12021) at android.support.v4.app.Fragment.restoreViewState(Fragment.java:425) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:949) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) 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:4800) 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:798) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565) at dalvik.system.NativeStart.main(Native Method) 我的简单课看起来像以下,应该是,实际上,很好…… public class RoutineDayFragment […]

第二次显示ViewPager时出现NullPointerException

我正在使用一个ViewPager片段,它有两个片段作为子片段。 这很好用,但是当我用另一个片段替换ViewPager片段并用ViewPager片段替换这个片段时,我的应用程序崩溃时出现以下NullPointerException : java.lang.NullPointerException: Attempt to invoke virtual method ‘int java.util.ArrayList.size()’ on a null object reference at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:667) at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1319) at android.view.View.dispatchRestoreInstanceState(View.java:13756) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2888) at android.view.View.restoreHierarchyState(View.java:13734) at android.support.v4.app.Fragment.restoreViewState(Fragment.java:468) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1094) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5294) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) […]

工具命名空间属性,用于在设计时显示ViewPager中的布局

tools命名空间允许在布局设计器中显示视图属性。 例如,使用tools:listItem=”@layout/{custom_layout}可以在Android Studio设计器中显示包含自定义行布局的列表。 问题是: 是否可以在ViewPager显示布局?

Android ViewPager在设置当前项目/页面时抛出IndexOutOfBoundsexception

我有一个包含三个项目的ViewPager。 我试图设置ViewPager来查看最右边的页面(这将是第二个元素)。 这是返回一个IndexOutOfBoundsexception,虽然我知道索引应该在边界内。 这是确切的堆栈: 02-22 12:22:50.256: E/AndroidRuntime(384): FATAL EXCEPTION: main 02-22 12:22:50.256: E/AndroidRuntime(384): java.lang.IndexOutOfBoundsException: index=1 count=0 02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addInArray(ViewGroup.java:2050) 02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addViewInner(ViewGroup.java:1994) 02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addViewInLayout(ViewGroup.java:1958) 02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addViewInLayout(ViewGroup.java:1939) 02-22 12:22:50.256: E/AndroidRuntime(384): at android.support.v4.view.ViewPager.addView(ViewPager.java:917) 02-22 12:22:50.256: E/AndroidRuntime(384): at android.view.ViewGroup.addView(ViewGroup.java:1828) 02-22 12:22:50.256: E/AndroidRuntime(384): at us.tagverse.pagertest.MasterActivity$PAdapter.instantiateItem(MasterActivity.java:518) 02-22 12:22:50.256: E/AndroidRuntime(384): at […]

ViewPager,其中一个页面包含多个片段“java.lang.IllegalArgumentException:找不到id的视图”

在我的小型Android应用程序中,我有一个包含3个页面的ViewPager ,每个页面包含一个片段,这些片段都可以正常使用FragmentStatePagerAdapter (参见前面的问题 )。 现在对于更大的屏幕,我想保留一个ViewPager ,但我希望前两个片段在同一个第一页上。 为此,我实现了我自己的PagerAdapter,这主要是工作,我试图解决的唯一问题是当我旋转屏幕时,我收到一个错误: 12-11 16:34:13.526: ERROR/AndroidRuntime(9221): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.matthieu/com.matthieu.TestActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f030002 (com.matthieu:id/top_fragment) for fragment TestFragment{481a3a98 #0 id=0x7f030002} at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815) at android.app.ActivityThread.access$2400(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) […]

Android – 使用FragmentActivity + Loader更新FragmentStatePagerAdapter的问题

我正在尝试使用FragmentActivity和ViewPager来显示Fragments动态列表。 有很多关于如何做静态版本的例子。 我的问题是我显示的列表需要动态加载,也可以根据用户输入(添加/删除)进行更改。 我正在尝试使用自定义的android.support.v4.content.Loader来加载我可用于构建列表的数据集。 在我的设置中一切正常,直到我想要更新适配器并发出FragmentStatePagerAdapter#notifyDataSetChanged()调用,此时执行此代码(来自FragmentStatePagerAdapter ) public void finishUpdate(View container) { if(mCurTransaction != null) { mCurTransaction.commit(); // BANG!!! The exception is thrown mCurTransaction = null; mFragmentManager.executePendingTransactions(); } } 事务提交失败,并显示以下消息: java.lang.IllegalStateException: Can not perform this action inside of onLoadFinished 因为在FragmentManagerImpl中执行此代码: private void checkStateLoss() { if (mStateSaved) { throw new IllegalStateException( “Can not perform this action after […]

片段作为Android中的单身人士

一般问题我可以将碎片定义为单身人士吗? 具体问题在我的应用程序中,我有一个’FragmentActivity’和FragmentPager ,它有两个片段, FragmentA和FragmentB 。 我将片段定义为FragmentA Singletons扩展Fragment类: private static instance = null; public static FragmentA getInstance() { if (instance == null) { instance = new FragmentA(); } return instance; } private FragmentA() {} 在我的FragmentPagerAdapter : @Override public Fragment getItem(int position) { switch(position){ Fragment fragment = null; case 0: fragment = FragmentA.getInstance(); break; case 1: fragment […]

如何在viewpager的特定选项卡中显示当前片段?

我想在tab b_1获取最后一个片段,或者当前显示的内容与我相同。 正如您在下图中看到的那样,我有一个ViewPager,另一个是内部tab b 。 因此,显示了四个当前片段。 问题 :如何获取Fragment 2实例? 我见过另一种解决方案,但没有一种适用于这种情况。 注释: ViewPager中托管的片段不是必需的。 我可以在一个标签中打开另外两个片段。 使用这种方法,我得到所有当前可见的片段,但不是我想要的特定片段。 public ArrayList getVisibleFragment() { List fragments = getSupportFragmentManager().getFragments(); ArrayList visibleFragments = new ArrayList(); if (fragments != null) { for (Fragment fragment : fragments) { if (fragment != null && fragment.isVisible()) visibleFragments.add(fragment); } } return visibleFragments; } 一些有趣的代码 activity_main.xml中 MainActivity.java public class […]