调用 finish() 时意图未完成

Intent is not finishing when calling finish()

我正在开发一个闹钟,这个 class 是为了快速选择小时和分钟,它也会将它发回我使用 setForresult() 的意图,但出于某种原因当我按下按钮以设置它重新创建 activity 的时间,我必须再次输入它,但第二次它做了它应该做的事情。

package com.bignerdranch.android.alarm;

import android.app.AlarmManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TimePicker;

public class setAlarmTimes extends AppCompatActivity {
AlarmManager manager;
private TimePicker myTimePicker;
private static final String TAG = "MYTAG";
private static Button sendVals;
int hour,minute;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_set_alarm_times);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    Log.i(TAG,"in ONCREATE");
    myTimePicker = (TimePicker) findViewById(R.id.timePicker);
    sendVals = (Button)findViewById(R.id.setAlarmValuesButton);

    sendVals.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent sent = new Intent(setAlarmTimes.this,setAlarmList.class);
            hour = myTimePicker.getCurrentHour();
            minute = myTimePicker.getCurrentMinute();
            sent.putExtra("HOUR",hour);
            sent.putExtra("MINUTE",minute);
            setResult(setAlarmList.REQUEST_CODE, sent);
            Log.i(TAG, "IMPORTANT VALUES _____" +hour + minute);
            finish();
            Log.i(TAG,"shouldnt ovvur");
        }
    });





    Log.i(TAG,"Hour and min is " + hour+ ":"+ minute);




}

}



package com.bignerdranch.android.alarm;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;

public class setAlarmList extends AppCompatActivity {
private static Button addAlarm;
private static Button removeAlarm;
public static final int REQUEST_CODE= 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_set_alarm_list);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    addAlarm = (Button) findViewById(R.id.myAddButton);
    removeAlarm = (Button) findViewById(R.id.myRemoveButton);

    addAlarm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent getTimes = new      Intent(setAlarmList.this,setAlarmTimes.class);
            startActivity(getTimes);
            startActivityForResult(getTimes,REQUEST_CODE);
        }
    });


}

}

在你的Onclicklistener闹钟中(见下文)

addAlarm.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent getTimes = new      Intent(setAlarmList.this,setAlarmTimes.class);
        startActivity(getTimes); // here remove it
        startActivityForResult(getTimes,REQUEST_CODE); // here retain it
    }
});

您启动了 activity 两次,您应该只使用 startActivityForResult。删除 startActivity(getTimes)

使用下面的代码:

addAlarm.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) {
    Intent getTimes = new Intent(setAlarmList.this,setAlarmTimes.class);
    startActivityForResult(getTimes,REQUEST_CODE);  
} 
});