[英]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.