【发布时间】:2015-09-08 18:38:48
【问题描述】:
在 ViewPager 中实现什么更好?
- 通过替换片段打开另一个片段的片段。
或
- 按意图打开活动的片段。
我都用过,两者都有自己的缺点。
第一个问题。
- 它显示 viewPager 选项卡,而不是在
第二个片段。 - 返回时会导致 ANR 错误和奇怪的 logcat 错误 堆。 (不是每次,这让我头疼)。 (见下面的 logcat)
第二个问题。
- 它从片段转到活动,但在从第二个返回到 首先,按下后退按钮后,它再次回到活动状态 再按一次后退按钮后,它会进入第一个状态 片段/viewpager/mainActivity。
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)
【问题讨论】:
-
你决定。这两个问题看起来都可以解决(除了 viewpager 仍然显示选项卡),您应该只显示一些代码。
-
我的意思是哪个更好用?如果你必须实现一个,你会选择哪一个?
-
没有更好的选择,看内容。显示联系人列表并通过单击联系人转到他的个人资料页面?最好参加一项新活动。显示用户可以通过单击编辑的简单字符串列表?最好呆在那里。这取决于设计选择、标签的排列方式……
标签: android android-fragments android-activity android-viewpager