Android 在ViewPager导航中使用什么-片段到片段或片段到活动?

Android 在ViewPager导航中使用什么-片段到片段或片段到活动?,android,android-fragments,android-activity,android-viewpager,Android,Android Fragments,Android Activity,Android Viewpager,在ViewPager中实现什么更好 通过替换片段打开另一个片段的片段 或 通过意图打开活动的片段 我两者都用过,而且都有各自的缺点 第一个问题 当处于 第二段 返回时会导致ANR错误和奇怪的logcat错误 堆栈(不是每次都是这样,这让我头痛)。(见下面的日志) 第二个问题 它从一个片段转到另一个活动,但在从第二个片段返回到第二个活动之后 首先,按下“上一步”按钮后,它再次返回“活动” 再按一次后退按钮,它就进入了第一个状态 片段/viewpager/main活动的 Logcat E/Andro

在ViewPager中实现什么更好

  • 通过替换片段打开另一个片段的片段

  • 通过意图打开活动的片段
  • 我两者都用过,而且都有各自的缺点

    第一个问题

  • 当处于
    第二段
  • 返回时会导致ANR错误和奇怪的logcat错误 堆栈(不是每次都是这样,这让我头痛)。(见下面的日志)
  • 第二个问题

  • 它从一个片段转到另一个活动,但在从第二个片段返回到第二个活动之后 首先,按下“上一步”按钮后,它再次返回“活动” 再按一次后退按钮,它就进入了第一个状态 片段/viewpager/main活动的
  • Logcat

    E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.widefide.musicplayer, PID: 14058
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.widefide.musicplayer/com.widefide.musicplayer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3947)
                at android.app.ActivityThread.access$900(ActivityThread.java:151)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5254)
                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:903)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                at com.widefide.musicplayer.Fragments.Playlists.PlaylistsFragment.onActivityCreated(PlaylistsFragment.java:72)
                at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1797)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:979)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1120)
                at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1929)
                at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
                at com.widefide.musicplayer.MainActivity.onStart(MainActivity.java:127)
                at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
                at android.app.Activity.performStart(Activity.java:6006)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3947)
                at android.app.ActivityThread.access$900(ActivityThread.java:151)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5254)
                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:903)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    

    从第一个问题开始,在第一种情况下,很明显你们想要一个新的屏幕,所以最好是一个新的活动。第二个解决方案中的问题似乎是一个bug,请发布代码以便我们能够解决它。

    ViewPager是一个片段到片段的导航

    你必须通过碎片列表。当您滚动页面时,片段将替换为下一个片段


    1st中,您可以通过通知父
    活动
    来替换
    片段
    本身,而
    活动
    将用其他
    片段
    替换该
    片段。您仍然可以通过
    活动
    控制
    工具栏
    。您可以通过(使用
    接口
    )或使用


    在我更喜欢的2nd中,您可以轻松地有目的地打开
    活动
    ,您可以通过
    on backpressed
    或。

    控制您的背压。这两个问题看起来都是可以解决的(除了viewpager仍然显示选项卡之外),您应该只显示一些代码?如果你必须实现一个,你会选择哪一个?没有更好的选择,这取决于内容。显示联系人列表并单击联系人,您可以转到他的个人资料页面?最好开始一项新的活动。显示用户可以通过单击编辑的简单字符串列表?最好呆在那里。这取决于设计选择,取决于您如何安排选项卡。。。