活动没有完成

时间:2014-01-29 08:47:30

标签: android android-activity

我有DialogFragment,其中包含DatePickerDialog。每当我设置日期时,都会启动一个新活动。当我按回它时,它会回到相同的活动。为什么活动没有完成?

在活动中,我按以下方法启动对话框:

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch(item.getItemId()){
        case R.id.calendar:
            new ViewCalendar().show(getFragmentManager(), "Calendar");
            return true;
    }
    return false;
}

我在片段中有以下内容:

@Override
public void onDateSet(DatePicker view, int y, int m, int d) {
    c.set(y, m, d);
    Intent intent = new Intent(getActivity(), Calendar.class);
    getActivity().finish();
    startActivity(intent);
}

编辑:

我将更多地描述这个问题。

我的活动A带有一个启动DatePickerDialog的按钮。我选择了一个日期,并且应该发生以下情况:

  • 活动A完成。
  • 创建了活动A的新实例。

现在发生的事情是:

  • 活动A保持在后台。
  • 创建了活动A的新实例。

一堆活动现在是A - A,这就是为什么如果我按回它会回到旧实例。

3 个答案:

答案 0 :(得分:2)

实际上你的Back堆栈不清楚,这就是你以前的活动在开启时打开的原因 背压。如此清理你的Back堆栈,它将完美地工作。

应用此代码:

@Override
public void onDateSet(DatePicker view, int y, int m, int d) {
    c.set(y, m, d);
    Intent intent = new Intent(getActivity(), Calendar.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    getActivity().finish();
}

答案 1 :(得分:0)

使用getActivity()。this.finish();而不是getActivity()。finish();

答案 2 :(得分:0)

您应首先启动意图,然后完成当前活动。

@Override
public void onDateSet(DatePicker view, int y, int m, int d) {
    c.set(y, m, d);
    Intent intent = new Intent(getActivity(), Calendar.class);
    startActivity(intent);
    getActivity().finish();
}