我的活动中有3个片段,每个片段的编号分别为1,2和3。如果完成片段1,则相关的视图内容将被第二个片段替换,并且对于frgs而言也是相同的。 2&3。
我可以在操作栏中更改应用程序。语言,当我更改语言时,我需要使用新的资源刷新相关的布局,为此,我使用了:
private fun refreshView() {
this.recreate()
}
我的铅。是在重新创建活动时,而我在第二个或第三个片段中,则该活动返回到第一个。
我该如何解决?是否有解决方案以刷新视图而不重新创建活动?
答案 0 :(得分:0)
尝试创建静态常量类或应用程序类,在其中可以将当前片段保存为count或string,并在重新创建后显示保存在上述类中的Fragment。
答案 1 :(得分:0)
您可以将片段编号保存在SharedPreference中。但是在我看来,重新创建活动是错误的方法。您应该只重新加载当前片段中的所有数据。
答案 2 :(得分:0)
我建议您阅读本文档,其中介绍了如何保存UI状态:https://developer.android.com/topic/libraries/architecture/saving-states
在我看来,结合LiveData,ViewModel可以很好地解决您的问题。
ViewModel:https://developer.android.com/topic/libraries/architecture/viewmodel
LiveData:https://developer.android.com/topic/libraries/architecture/livedata
答案 3 :(得分:0)
public class MainActivity extends AppCompatActivity {
private int fragmentIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.btn_next);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fragmentIndex++;
if (fragmentIndex >= 3) {
fragmentIndex = 0;
}
showFragment(fragmentIndex);
}
});
//get the index saved
if (savedInstanceState != null) {
fragmentIndex = savedInstanceState.getInt("index");
}
showFragment(fragmentIndex);
}
//override this function to save fragment index. This function will be called when activity is destroyed.
//And when activity is recreated, you can get the index from the savedInstanceState as code above.
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("index", fragmentIndex);
}
private void showFragment(int index) {
Fragment fragment = SimpleFragment.createFragment(String.valueOf(index));
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
}
public static class SimpleFragment extends Fragment {
public static SimpleFragment createFragment(String index) {
SimpleFragment fragment = new SimpleFragment();
Bundle bundle = new Bundle();
bundle.putString("index", index);
fragment.setArguments(bundle);
return fragment;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_simple, container, false);
TextView indexView = rootView.findViewById(R.id.tv_index);
String index = getArguments().getString("index");
indexView.setText(index);
return rootView;
}
}
}
通过旋转设备使活动重新创建,您可以在覆盖或不覆盖onSaveInstanceState
函数的情况下测试我的代码