片段似乎非常适合将UI逻辑分离为某些模块.但随着ViewPager
它的生命周期对我来说仍然是迷雾.因此迫切需要大师的想法!
见下面的哑解决方案;-)
主要活动有ViewPager
碎片.这些片段可以为其他(子域)活动实现一些不同的逻辑,因此片段的数据通过活动内部的回调接口填充.第一次发布时一切正常,但是!...
当重新创建活动时(例如,在方向改变时),那么ViewPager
碎片也是如此.代码(你会在下面找到)说每次创建活动时我尝试创建一个ViewPager
与片段相同的新片段适配器(也许这就是问题)但FragmentManager已经将所有这些片段存储在某个地方(其中?)和为那些人启动娱乐机制.因此,重新启动机制使用我的回调接口调用来调用"旧"片段的onAttach,onCreateView等,以通过Activity的实现方法启动数据.但是这个方法指向通过Activity的onCreate方法创建的新创建的片段.
也许我使用了错误的模式,但即便是Android 3 Pro也没有太多关于它的内容.所以,请给我一两拳,并指出如何以正确的方式做到这一点.非常感谢!
主要活动
public class DashboardActivity extends BasePagerActivity implements OnMessageListActionListener {
private MessagesFragment mMessagesFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
Logger.d("Dash onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_container);
new DefaultToolbar(this);
// create fragments to use
mMessagesFragment = new MessagesFragment();
mStreamsFragment = new StreamsFragment();
// set titles and fragments for view pager
Map<String, Fragment> screens = new LinkedHashMap<String, Fragment>();
screens.put(getApplicationContext().getString(R.string.dashboard_title_dumb), new DumbFragment());
screens.put(getApplicationContext().getString(R.string.dashboard_title_messages), mMessagesFragment);
// …
Run Code Online (Sandbox Code Playgroud) 我有3个片段,一个NavigationDrawer,一个MapFragment和一个用户定义的"MapInfoFragment".我希望"MapInfoFragment"在某些事件上在MapFragment顶部显示为半透明,在其他事件上消失.如果我每次都完全删除片段并创建一个新片段,或者我只是更改显示的可见性和信息,我真的不在乎.目前我只是尝试使用FragmentManager的.hide()函数,但我也尝试过.remove和.detach,结果相似.
错误:
03-18 14:28:10.965 24711-24711/com.[packageName].asTest D/AndroidRuntime? Shutting down VM
03-18 14:28:10.965 24711-24711/com.[packageName].asTest E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.[packageName].asTest, PID: 24711
java.lang.NullPointerException: Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference
at android.app.BackStackRecord.run(BackStackRecord.java:658)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
Run Code Online (Sandbox Code Playgroud)
activity_main.xml中:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.[packageName].asTest.MainActivity">
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both …
Run Code Online (Sandbox Code Playgroud) 我有一个带有ActionBarSherlock选项卡的Activity和一个ViewPager.滚动页面时,切换选项卡并更改选项卡,当前页面也会更改.我正在使用一个扩展FragmentStatePagerAdapter的类作为页面视图中的适配器.问题是当设备旋转时,不会调用页面适配器中的getItem,看起来片段引用不正确.这是一个很大的问题,因为用户必须在寻呼机内完成一些字段.这些字段在旋转时正确恢复,但由于我对片段的引用不正确,我无法以正确的方式保存这些值.关于轮换的任何想法?