Android活动ListView LoaderManager导航,记住以前的状态

时间:2012-07-29 12:01:56

标签: android android-activity android-loadermanager

我有我的启动器活动,它会生成一个ListView。

现在在ListView上我有一个setOnItemClickListener,它基本上将位置和id传递给一个新活动。

mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(ActivityHome.this, ActivityDetail.class);
            intent.putExtra("cm_position", position);
            intent.putExtra("cm_id", id);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    });

现在,ActivityHome中的ListView显示在ListView中间的某个位置。

当我在ActivityDetail中时,我有一个actionBar.setDisplayHomeAsUpEnabled(true);因此,当执行以下操作时,它将返回ActivityHome

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent intent = new Intent(this, ActivityHome.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

问题是ListView中的位置丢失,ListView返回到顶部。有没有办法阻止onCreate()执行,只是破坏ActivityDetail的Activity,然后回到ActivityHome,它就是它...我希望你能理解。

我想我可能为意图设置了错误的标志......

1 个答案:

答案 0 :(得分:0)

修正:

在ActivityDetail中,您需要设置此标志

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

我知道这与正确使用旗帜有关!

上面示例中当前运行的活动B实例将在其onNewIntent()方法中接收您从此处开始的新意图,或者本身已完成并使用新意图重新启动。如果它已将其启动模式声明为“多个”(默认值)并且您没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将被完成并重新创建;对于所有其他启动模式或者如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此Intent将被传递到当前实例的onNewIntent()。