繁体   English   中英

recyclerView如何保持其滚动位置而无需任何额外的编码

[英]how is the recyclerView maintains its scroll position without any extra coding

创建了一个具有recyclerView并显示数据列表的简单活动。 启用该设置后, 'don't keep activity alive' ,并将'Background process limit''No background process' 期望活动将在后台被os杀死。

当最小化应用程序并重新打开它时,看到活动的onCreate()在新实例上被调用,并且再次执行所有操作以创建一组新的recyclerView和带有新数据列表的适配器。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        mRecyclerView = findViewById(R.id.recyclerView);
        setSupportActionBar(toolbar);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(layoutManager);
    }

但是ui仍将项目显示在最后滚动的位置(正确还原)。

有人知道先前的职位如何转移到新的recyclerView实例等吗?

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:titleTextColor="@android:color/white"
         />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </ScrollView>
</LinearLayout>

活动:

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private ItemAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        mRecyclerView = findViewById(R.id. recyclerView);
        setSupportActionBar(toolbar);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(layoutManager); 
    }


    @Override
    protected void onResume() {
        super.onResume();

        new FetchItemASyncTask(this).execute();
        // in the asyncTask it will do setup adapter when data ready
        // mAdapter = new ItemAdapter(dataList)
        // mRecyclerView.setAdapter(mAdapter);
    }
}

这是Android对许多视图执行的默认状态保存的一部分。 启用此功能所需要做的唯一一件事就是为视图提供android:id属性(如果删除该ID,您会注意到它不再保存滚动位置)。 对于输入到EditText的文本也是如此。

暂无
暂无

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

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