相关疑难解决方法(0)

ViewPager和片段 - 什么是存储片段状态的正确方法?

片段似乎非常适合将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)

android design-patterns android-fragments android-viewpager

483
推荐指数
5
解决办法
22万
查看次数

Android - 保存/恢复片段状态

我有一个活动,其中我经历了几个片段.在每个片段中,我都有几个视图(EditText, ListView, Map等).

如何保存当时显示的片段实例?我需要它在活动时工作onPause() --> onResume().当我从另一个片段(从backstack弹出)返回时,我需要它才能工作.

从主要的Activity我调用第一个片段,然后从片段我调用下一个片段.

我的活动代码:

public class Activity_Main extends FragmentActivity{

public static Fragment_1 fragment_1;
public static Fragment_2 fragment_2;
public static Fragment_3 fragment_3;
public static FragmentManager fragmentManager;

@Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

     fragment_1 = new Fragment_1();

     fragment_2 = new Fragment_2();

     fragment_3 = new Fragment_3();

     fragmentManager = getSupportFragmentManager();
     FragmentTransaction transaction_1 = fragmentManager.beginTransaction();
     transaction_1.replace(R.id.content_frame, fragment_1);
     transaction_1.commit();
}}
Run Code Online (Sandbox Code Playgroud)

然后这是我的一个片段的代码:

public class Fragment_1 extends Fragment {

      private EditText title;
      private Button go_next;


      @Override …
Run Code Online (Sandbox Code Playgroud)

android fragment onresume android-fragments back-stack

46
推荐指数
4
解决办法
11万
查看次数

使用片段保存和恢复状态

我试图了解使用片段保存和恢复状态的过程。我用它创建了滑动导航菜单。

在其中一个片段中有这样的代码:

public class FifthFragment extends Fragment {

    CheckBox cb;
    View view;

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.fifth_layout, container, false);
        cb = (CheckBox) view.findViewById(R.id.checkBox);
        return view;

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        if (savedInstanceState != null) {
            // Restore save state
        }

    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        // save state
    }

}
Run Code Online (Sandbox Code Playgroud)

例如,我想在用户退出片段之前保存复选框的状态,并在再次创建片段时恢复它。如何实现这一目标?

编辑:

根据 raxellson 的回答,我已将片段更改为:

public class FifthFragment extends Fragment {

    private static final …
Run Code Online (Sandbox Code Playgroud)

android savestate android-fragments

2
推荐指数
1
解决办法
2万
查看次数