- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 ViewPager 中有一个 fragment 。 Fragment 包含一个 RecyclerView(想想 ListView)。当用户离开然后返回到 fragment 时,无论用户离开列表的何处,列表总是从顶部重新开始。所以我需要以某种方式保留 currPosition
。 savedInstanceState 是存储它的好地方吗?如果是,我在哪个回调中读取数据?同样,这是在 ViewPager 中,我使用的是 FragmentPagerAdapter,因此调用的回调并不多。我仍然存在更广泛的问题:是什么导致 Fragment 的 savedInstanceState 非空?
进一步扩大问题的广度。想象一下我有一个包含两个 fragment 的 Activity 。我在需要时分离并附加 fragment 。假设我离开了 Activity 。如果 Activity 的 savedInstanceState 不为空, fragment 的 savedInstanceState 是否为空?确切地说,这是第二种情况的一些代码
private void addMainFragment() {
FragmentManager fm=getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
Fragment removeFragment = fm.findFragmentByTag(getString(R.string.fragment_a));
if(null != removeFragment){
transaction.detach(removeFragment);
}
Fragment fragment = fm.findFragmentByTag(getString(R.string.fragment_b));
if(null != fragment){
transaction.attach(fragment);
}else{
fragment=MainFragment.newInstance(null,null);
交易。 添加(R.id.fragment_container, fragment ,getString(R.string.fragment_b));
交易.commit();
最佳答案
savedInstanceState 是保存当前位置、所选项目等信息的最佳位置。
查看分页器有一个离屏页面限制,用于处理当前可见页面任一侧保持空闲的页面数量(在本例中为 fragment )。如果页面超出此限制,则页面将被销毁。这是为了保持较低的内存使用率。此设置默认为 1。因此,当 fragment 超出此限制然后返回时,其 savedInstanceState 将为非空。
回答你的第二个问题。我不太清楚你所说的离开 Activity 是什么意思。如果您离开 Activity (例如按后退/主页按钮),请返回。 Activity savedInstanceState 将为空。如果您在当前 Activity 之上启动另一个 Activity ,则会调用 onSavedInstance。
这是我在我的一个项目中使用的一段代码,用于在 viewpager 中恢复 fragment 状态。
您可以覆盖 onSaveInstanceState
以保存有关 fragment 的一些信息。
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// restore state
mListState = mLayoutManager.onSaveInstanceState();
state.putParcelable("list_state", mListState);
}
然后在 fragment onCreateView
中你可以恢复recycelerview的状态
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
// save list state
mListState = state.getParcelable("list_state");
mLayoutManager.onRestoreInstanceState(mListState);
}
return root;
}
关于android - Fragments 什么时候有非空的 savedInstanceState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32575186/
相当简单的问题,但我无法在任何地方找到明确的答案。 fragment 的savedInstanceState和 fragment 的父activity(或封装 fragment )的savedInst
我在获取 Activity 状态时遇到问题。我有 2 个 Activity :MainActivity 和 Activity2。在 MainActivity 中,我放了一个 editText 和一个
我想在与另一台设备“同步”时获取当前系统时间。因此,此 Activity 通常在同步后立即调用/显示。 目前,当前系统时间是正确的,但我还弹出另一个 Activity 的警报,一旦我完成该 Activ
在 Google Api 示例代码中,他们有一个关于保存状态的非常简单的示例。我需要这个来处理屏幕旋转。 我的问题是我不明白方法 getSavedText() 和 setSaveText() 是从哪里
我有一个秒表应用程序,它只有一项 Activity 。三个按钮启动、停止、重置和一个显示计时器的 TextView 。这是我的代码: public class StopwatchActivity ex
我有一个 ViewPager,其中包含用户输入不同输入的一些 fragment 。其中一个 fragment 包含一个 DatePicker 和一个 TimePicker ,我将其存储(当用户选择了日
如果我没有显式调用 onSaveInstanceState(),当 onCreate 中的 savedInstanceState 不为 null 时,这是可能的吗? 我看到一个选项,当系统在崩溃后重新
所以我的 OnsavedInstanceState 中有这段代码 @Override public void onSaveInstanceState(Bundle savedInstanceState
我正在制作一个 Android 应用程序,但我一直遇到一个奇怪的错误。游戏结束后,如果您点击手机上的“返回”按钮,您将回到完成的游戏并继续玩!! 如何防止这种情况发生?有没有办法删除之前的SavedI
我刚开始使用 Android,我遇到了以下问题: 我正在尝试在打开新 Activity 时保存 InstanceState,并且我需要在 Activity 返回可见状态时恢复该状态。 这是我的 onS
在我的主要 Activity 中有一些代码说 if (savedInstanceState != null) { mCurrentSelectedPosition = save
我是 Android 的新手,我在使用 savedInstanceState 和管理生命周期时遇到了一些麻烦。 http://developer.android.com/guide/topics/fu
我有以下情况: Activity A 启动 Activity B Activity A 调用 onPause、onSaveInstanceState 和 onStop 方法。 在 Activity B
据我了解,Activity 会自动保存 View 的状态,而 EditText 和 TextView 之类的东西会自动恢复它们的状态。 这不适用于可见性吗? 例如:如果默认情况下在 XML 中,我有一
我是 Android 开发的新手,但我对 OOP 概念有一些了解。我正在尝试从 Java 的角度学习 Android。 我了解到第9行onCreate()里面的savedInstanceState是B
因此,Activity.onCreate() 将一个Bundle 作为参数,默认情况下它被称为savedInstanceState。 savedInstanceState 是否在应用更新到较新版本时保
这是我保存的InstaceState 代码: @Override public void onSaveInstanceState(Bundle savedInstanceState) { sa
我在 ViewPager 中有一个 fragment 。 Fragment 包含一个 RecyclerView(想想 ListView)。当用户离开然后返回到 fragment 时,无论用户离开列表的
我只是想通过这个简单的例子来了解 Activity 的生命周期,方法是找出如何取回 SomeIntegers g_values 对象和其中的 ArrayList AnInteger 对象。 事实上,它
我正在使用 onSaveInstanceState 方法来存储和检索 fragment 内的局部变量。我的一个 fragment 中有以下代码(简化): private final SimpleDat
我是一名优秀的程序员,十分优秀!