Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView没有';我不记得屏幕旋转时的选择_Android_Adapter_Android Recyclerview - Fatal编程技术网

Android RecyclerView没有';我不记得屏幕旋转时的选择

Android RecyclerView没有';我不记得屏幕旋转时的选择,android,adapter,android-recyclerview,Android,Adapter,Android Recyclerview,在我的RecyclerView的Adapter中,我使用以下方法来记住当前选择的项目并在屏幕上恢复它: private final static String SELECTED_ITEM = "MyAdapter.selectedItem"; public void onSaveInstanceState(Bundle outState){ Log.i("onSave","OnSave "+mSelectedItem); outState.putInt(SELECTED_ITE

在我的
RecyclerView
Adapter
中,我使用以下方法来记住当前选择的项目并在屏幕上恢复它:

private final static String SELECTED_ITEM = "MyAdapter.selectedItem";

public void onSaveInstanceState(Bundle outState){
    Log.i("onSave","OnSave "+mSelectedItem);
    outState.putInt(SELECTED_ITEM, mSelectedItem);
}

public void onRestoreInstanceState(Bundle savedInstanceState){
    if(savedInstanceState.containsKey(SELECTED_ITEM)){
        Log.i("onRestore","OnRestore " + savedInstanceState.getInt(SELECTED_ITEM));
        notifyItemChanged(mSelectedItem);
        mSelectedItem = savedInstanceState.getInt(SELECTED_ITEM);
        notifyItemChanged(mSelectedItem);
        mRecyclerView.getLayoutManager().scrollToPosition(mSelectedItem);
    }
}
在我的
片段
中,我使用了
回收视图

@Override
public void onSaveInstanceState(Bundle outState) {
    if(null != mRecyclerView && null != mRecyclerView.getAdapter()){
        ((MyAdapter)mRecyclerView.getAdapter()).onSaveInstanceState(outState);
    }
    super.onSaveInstanceState(outState);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if(null!=savedInstanceState){
        if(null != mRecyclerView && null != mRecyclerView.getAdapter()){
            ((MyAdapter)mRecyclerView.getAdapter()).onRestoreInstanceState(savedInstanceState);
        }
    }
}
我看到
日志
消息,但是
适配器
不记得选择

多亏了塞尔文,我很快意识到问题在于每次屏幕旋转时我都在重新创建
片段
,而新的
片段
,当然,没有要恢复的选择int

在根
活动的
onCreate
方法中,检查您是否第一次创建
活动

@Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        mContentLayout = (FrameLayout)findViewById(R.id.main_content_frame);
        if(null==savedInstanceState) {
            mFragment = new MyFragment();
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(mContentLayout.getId(), mPlatformsFragment);
            fragmentTransaction.commit();
        }
    }
然后在
片段中
,要保存所选项目,请使用:

private final static String SELECTED_ITEM = "MyAdapter.mSelectedItem";

//Save your selection
@Override
public void onSaveInstanceState(Bundle outState) {
    if(null!=mAdapter){
        outState.putInt(SELECTED_ITEM, mAdapter.mSelectedItem);
    }
    super.onSaveInstanceState(outState);
}

//Restore your selection
@Override
public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        mAdapter.notifyItemChanged(platformsAdapter.mSelectedItem);
        mAdapter.mSelectedItem = savedInstanceState.getInt(SELECTED_ITEM, 0);
        mAdapter.notifyItemChanged(platformsAdapter.mSelectedItem);
        mRecyclerView.post(new Runnable() {
            @Override
            public void run() {
                //Align selection to top
                mLayoutManager
                    .scrollToPositionWithOffset(mAdapter.mSelectedItem, 0);
            }
        });
    }
}
多亏了塞尔文,我很快意识到问题在于每次屏幕旋转时我都在重新创建
片段
,当然,新的
片段
,没有要恢复的选择int

在根
活动的
onCreate
方法中,检查您是否第一次创建
活动

@Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        mContentLayout = (FrameLayout)findViewById(R.id.main_content_frame);
        if(null==savedInstanceState) {
            mFragment = new MyFragment();
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(mContentLayout.getId(), mPlatformsFragment);
            fragmentTransaction.commit();
        }
    }
然后在
片段中
,要保存所选项目,请使用:

private final static String SELECTED_ITEM = "MyAdapter.mSelectedItem";

//Save your selection
@Override
public void onSaveInstanceState(Bundle outState) {
    if(null!=mAdapter){
        outState.putInt(SELECTED_ITEM, mAdapter.mSelectedItem);
    }
    super.onSaveInstanceState(outState);
}

//Restore your selection
@Override
public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        mAdapter.notifyItemChanged(platformsAdapter.mSelectedItem);
        mAdapter.mSelectedItem = savedInstanceState.getInt(SELECTED_ITEM, 0);
        mAdapter.notifyItemChanged(platformsAdapter.mSelectedItem);
        mRecyclerView.post(new Runnable() {
            @Override
            public void run() {
                //Align selection to top
                mLayoutManager
                    .scrollToPositionWithOffset(mAdapter.mSelectedItem, 0);
            }
        });
    }
}

RecyclerView
有自己的。。。从Fragment的生命周期来看,似乎在所有视图的恢复安装状态之前调用了创建的
onActivityCreated
。@Selvin它不存储关于适配器及其所选位置的任何信息。请进一步调试,并了解为什么mSelectedItem不更新您的UI。它不存储有关适配器及其所选位置的任何信息,因为它不是适配器的角色,而是RecyclerView本身(或其父项)…像一个符咒一样工作<代码>回收视图
有自己的。。。从Fragment的生命周期来看,似乎在所有视图的恢复安装状态之前调用了创建的
onActivityCreated
。@Selvin它不存储关于适配器及其所选位置的任何信息。请进一步调试,并了解为什么mSelectedItem不更新您的UI。它不存储有关适配器及其所选位置的任何信息,因为它不是适配器的角色,而是RecyclerView本身(或其父项)…像一个符咒一样工作。。。