代码之家  ›  专栏  ›  技术社区  ›  mirzak

如何保持android活动的状态

  •  1
  • mirzak  · 技术社区  · 6 年前

    MainActivity 还有人打电话来 DetailActivity . 应用程序第一次启动时会打开 主要活动 它就在那里 DataService

    从这个列表视图中,用户有一个按钮,可以为列表中的每个项目打开所谓的详细视图。打开该详细视图意味着开始第二个活动( 详细信息活动 ).

    它是这样做的:

    final Intent intent = new Intent(getContext(), DetailActivity.class);
    intent.putExtra("data", dto);
    getContext().startActivity(intent);
    

    除了用户返回到 数据服务 再次绑定,调用获取数据并更新列表。因此,如果用户在第205项的某处,他将返回到起始项。

    主要活动 当用户返回到它时,它没有刷新吗?

    @Override
    protected void onStart() {
        super.onStart();
        bind(DataService.class);
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(connection);
    }
    
    private void bind(final Class... toBind) {
        for (final Class clazz : toBind) {
            bindService(new Intent(this, clazz), connection, BIND_AUTO_CREATE);
        }
    }
    
    private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(final ComponentName name, final IBinder service) {
            if (service instanceof DataService.LocalBinder) {
                dataService = ((DataService.LocalBinder) service).getInstance();
                dataService.readData();
            }
        }
    
        @Override
        public void onServiceDisconnected(final ComponentName name) {
            // Empty By Default
        }
    };
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Hendrik Marx    6 年前

    您可以通过在中绑定服务来实现这一点 onCreate() 而不是 onStart() .

    你也应该看看你生命周期的对称性。当前您正在开始绑定,并在销毁中解除绑定。如果你加入 onStart onStop . 当您将绑定移动到 onCreate 你可以把解开的绑在里面 onDestroy

    说明: onCreate() 在第一次创建活动时调用。 onStart() 每次活动可见时都会调用。

        2
  •  0
  •   mirzak    6 年前

    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed(); // one inherited from android.support.v4.app.FragmentActivity
    
        return false;
    }
    

    这样做是为了达到目的。我会回到我离开的地方,没有必要加载任何数据,因为一切都已经存在