如何在不改变以前活动状态的情况下更改活动?

时间:2018-05-04 16:00:16

标签: android android-activity

我制作了一个应用程序,用3种不同的活动来改变壁纸

  1. 是类别列表
  2. 特定类别的壁纸列表
  3. 查看并设置所选壁纸
  4. 方案

    当我在1°活动中向下滚动时,例如,直到结束并点击一个类别我将进入2°活动但是当我回去时,我希望是1°活动的结束而不是我发现我自己一开始。 (也是2°活动到3°和背部)

    那么如何保存以前的状态呢?我使用RecyclerView来制作列表。 (我是Android工作室的新手,抱歉英语不好不是我的第一语言)

    如果我不够清楚有我的应用程序:

    https://play.google.com/store/apps/details?id=yangxun.animewallpaper

    这些是壁纸列表的代码,2°活动

    @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 "";
    }  
    

2 个答案:

答案 0 :(得分:1)

我猜您在onResume中的活动中刷新了列表,因此您最终会得到一个新的项目列表,它会滚动到顶部。这是正常的。

如果您不刷新onResume中的列表,那么您应该没问题。另一种方法:保存点击项目的索引,然后在返回列表后刷新呼叫:recyclerview.scrollToPosition(oldPosition)

答案 1 :(得分:0)

我只是改变了

protected void onStop(){
    if(adapter!=null)
        adapter.stopListening();
    super.onStop();
}

protected void onStop(){
    super.onStop();
}

一切正常!谢谢你的提示