Android 如何在不更改前一个活动状态的情况下更改活动?
我制作了一个应用程序,用3种不同的活动来改变壁纸Android 如何在不更改前一个活动状态的情况下更改活动?,android,android-activity,Android,Android Activity,我制作了一个应用程序,用3种不同的活动来改变壁纸 这是一个类别列表 特定类别的壁纸列表 查看并设置选定的墙纸 场景 例如,当我在1°活动中向下滚动,直到结束并单击某个类别时,我将转到2°活动,但当我返回时,我希望是1°活动的结束,而不是我在开始时发现自己。(也包括从2°活动到3°活动和反向活动) 那么如何保存以前的状态呢?我用RecyclerView列了这个清单。 (我是安卓工作室的新手,抱歉,糟糕的英语不是我的第一语言) 如果我不够清楚,我的应用程序: 这是壁纸列表的代码,2°活动 @Ove
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_wallpaper);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
toolbar.setTitle(Common.CATEGORY_SELECTED);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
recyclerView = (RecyclerView)findViewById(R.id.recycler_list_wallpaper);
recyclerView.setHasFixedSize(true);
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(gridLayoutManager);
loadBackgroundList();
}
private void loadBackgroundList(){ //....
}
@Override
protected void onStart(){
super.onStart();
if(adapter!=null)
adapter.startListening();
}
@Override
protected void onResume(){
super.onResume();
if(adapter!=null)
adapter.startListening();
}
@Override
protected void onStop(){
if(adapter!=null)
adapter.stopListening();
super.onStop();
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
if(item.getItemId()== android.R.id.home)
finish(); //Close activity when click Back button
return super.onOptionsItemSelected(item);
}
这是我的适配器
public MyFragmentAdapter(FragmentManager fm, Context context){
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position){
if(position==0)
return CategoryFragment.getInstance();
else
return null;
}
@Override
public int getCount(){
return 1;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Category";
}
return "";
}
我猜您在
onResume
中刷新了活动中的列表,因此您将得到一个新的项目列表,该列表将滚动到顶部。这很正常
如果您没有在onResume
中刷新列表,您应该会没事的。另一种方法是:保存单击项目的索引,在返回列表并刷新后,调用:recyclerview.scrollToPosition(oldPosition)
I只需更改即可
protected void onStop(){
if(adapter!=null)
adapter.stopListening();
super.onStop();
}
到
一切都很好!谢谢你的提示嗨!请向我们展示列表活动的代码。听起来好像每次显示活动时都要初始化列表(可能在onResume中)。或者可能您有一些配置更改。无论哪种方式,我们都需要更多信息来帮助您在“开发人员选项”中启用“杀死活动”选项吗?根据我的经验,除非重新创建活动,否则状态和滚动位置会被保存Hello Stein,欢迎使用SO!请分享一点您的代码,特别是在您配置RecyclerView和适配器的地方;没有它,这只是一个猜测游戏,每个人都在试图找出可能发生的事情。我们有想法,但如果没有具体的代码和你做过/没有做过的事情,那就困难多了。谢谢您想要实现的行为是默认行为。该活动负责在保存InstanceState期间保存视图的状态(这仅适用于在XML中设置了id的视图,但很可能您已经为RecyclerViews设置了id)。因此,如果这不起作用,这意味着当您返回到第一个活动时,您正在使用视图做一些事情。例如,如果您在活动的
onResume
中调用setAdapter
或notifyDataSetChanged
或类似操作,这将重置滚动位置。因此,请仔细检查恢复act 1时执行的代码。我添加了列表活动代码和适配器,自从我安装Android Studio以来,我没有更改任何选项
protected void onStop(){
super.onStop();
}