繁体   English   中英

应用程序进程被杀死后,片段无法恢复

[英]Fragment is not restored after app process is killed

我有一个recyclerview活动。 在recyclerview的适配器中,当用户单击元素时,将创建一个新的片段。 问题是当我按下主页按钮,杀死应用程序进程然后还原应用程序时,不会重新创建该片段。 应用程序进程被杀死后,如何恢复片段?

编辑:

我在活动中的onCreate方法:

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

        context = this;

        rvMain = (RecyclerView) findViewById(R.id.rvMain);
        rvMain.setLayoutManager(new LinearLayoutManager(context));
        MainAdapter adapter = new MainAdapter(numbers, context);
        rvMain.setAdapter(adapter);
    } 

recyclerview适配器中的onBindViewHolder方法,其中片段称为:

    @Override
    public void onBindViewHolder(MainViewHolder holder, final int position) {
        final Number number = numbers.get(position);

        holder.lytMain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DetailedFragment fragment = new DetailedFragment();
                Bundle bundle = new Bundle();
                bundle.putString("message", number.getName());
                fragment.setArguments(bundle);

                ((MainActivity) context).getSupportFragmentManager().beginTransaction()
                        .addToBackStack("fragment")
                        .replace(R.id.lytDetailed, fragment)
                        .commit();

            }
        });


    }

我找到了一个解决方案,我将调用片段移动到MainActivity中的某个方法中,然后使用onSaveInstanceState保存片段实例,并使用onRestoreInstanceState对其进行还原。 这是它的外观。

适配器中的onBindViewHolder:

    @Override
    public void onBindViewHolder(MainViewHolder holder, final int position) {
        final Number number = numbers.get(position);

        holder.lytMain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((MainActivity)context).getFragment(number);
            }
        });
    }

MainActivity中的getFragment()方法:

    public void getFragment(Number number){
        fragment = new DetailedFragment();
        Bundle bundle = new Bundle();
        bundle.putString("message", number.getName());
        fragment.setArguments(bundle);

        getSupportFragmentManager().beginTransaction()
                .addToBackStack("fragment")
                .replace(R.id.lytDetailed, fragment)
                .commit();
    }

onSaveInstanceState和onRestoreInstanceState:

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        getSupportFragmentManager().putFragment(outState, "detailed_fragment", fragment);
    }

    @Override
    protected void onRestoreInstanceState(Bundle outState) {
        super.onRestoreInstanceState(outState);
            fragment = (DetailedFragment) getSupportFragmentManager()
                    .getFragment(outState, "detailed_fragment");

            getSupportFragmentManager().beginTransaction()
                    .addToBackStack("fragment")
                    .replace(R.id.lytDetailed, fragment)
                    .commit();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM