Android 即使在第二个活动完成作业之前,也立即回到主要活动

Android 即使在第二个活动完成作业之前,也立即回到主要活动,android,datetimepicker,Android,Datetimepicker,我正在开发一个提醒应用程序。在我的主要活动中有一个浮动操作按钮,用于转到第二个活动。在第二个活动中,用户可以编写文本,设置提醒他的具体时间,并且用户还可以保存文本。当用户单击“保存”按钮时,活动将返回主活动,文本将保存在主活动中。我的问题是,在第二个活动中的用户设置时间选择器对话框之后,甚至在用户单击“保存”按钮之前,活动将立即返回主活动。我尝试了我知道的不同方法,并在这个问题上花费了很多时间。但是尚未找到错误。如果有人知道我的问题,请帮助。我非常感谢你们的帮助。 这是我的密码 package

我正在开发一个提醒应用程序。在我的主要活动中有一个浮动操作按钮,用于转到第二个活动。在第二个活动中,用户可以编写文本,设置提醒他的具体时间,并且用户还可以保存文本。当用户单击“保存”按钮时,活动将返回主活动,文本将保存在主活动中。我的问题是,在第二个活动中的用户设置时间选择器对话框之后,甚至在用户单击“保存”按钮之前,活动将立即返回主活动。我尝试了我知道的不同方法,并在这个问题上花费了很多时间。但是尚未找到错误。如果有人知道我的问题,请帮助。我非常感谢你们的帮助。

这是我的密码

package com.doflamingo.alarm;

public class MainActivity extends AppCompatActivity{
    private SQLiteDatabase mdatabase;
    private AlarmAdapter malarmAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AlarmDBHelper dbHelper = new AlarmDBHelper(this);
        mdatabase = dbHelper.getWritableDatabase();

        RecyclerView mrecyclerView = findViewById(R.id.recycler_view);
        mrecyclerView.setLayoutManager(new LinearLayoutManager(this));
        malarmAdapter = new AlarmAdapter(this, getAllItems());
        mrecyclerView.setAdapter(malarmAdapter);


        FloatingActionButton buttonAddAlarm = findViewById(R.id.button_add_alarm);
        buttonAddAlarm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, AlarmActivity.class);
                startActivity(intent);
            }
        });



    }

    private Cursor getAllItems(){
        return  mdatabase.query(
                AlarmContract.AlarmEntry.TABLE_NAME,
                null,
                null,
                null,
                null,
                null,
                AlarmContract.AlarmEntry.COLUMN_TIMESTAMP + " DESC"
        );
    }

}




public class AlarmActivity extends AppCompatActivity {

    private EditText mMessage;
    public static final String TAG = "MainActivity";
    private TextView mTextView;
    private Button mOpenTimePicker;
    private Button mSaveAlarm;
    private static int id;
    private SQLiteDatabase mdatabase;
    private AlarmAdapter malarmAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm);
        mMessage = findViewById(R.id.edittext_message);
        mTextView = findViewById(R.id.textView);
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close);
        setTitle("Add Alarm");
        AlarmDBHelper dbHelper = new AlarmDBHelper(this);
        mdatabase = dbHelper.getWritableDatabase();


        mOpenTimePicker = (Button) findViewById(R.id.button_alarm);
        mOpenTimePicker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TimePicker();
            }
        });

        Button mbuttonCancel = findViewById(R.id.button_cancel);
        mbuttonCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cancelAlarm();
            }
        });

        mSaveAlarm = findViewById(R.id.button_save_alarm);
        mSaveAlarm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                saveAlarm();
            }
        });
    }

    private void saveAlarm(){
        String message = mMessage.getText().toString();
       String text =  mTextView.getText().toString();

        if(text.trim().isEmpty()||message.trim().isEmpty()){
            Toast.makeText(this, "Please fill the fields", Toast.LENGTH_SHORT).show();
            return;
        }

        ContentValues cv = new ContentValues();
        cv.put(AlarmContract.AlarmEntry.COLUMN_TEXT,text );
        cv.put(AlarmContract.AlarmEntry.COLUMN_MESSAGE,message);

        mdatabase.insert(AlarmContract.AlarmEntry.TABLE_NAME, null, cv);
        malarmAdapter.swapCursor(getAllItems());
        Intent intent =  new Intent(AlarmActivity.this,MainActivity.class);
        startActivity(intent);
    }


    private Cursor getAllItems(){
        return  mdatabase.query(
                AlarmContract.AlarmEntry.TABLE_NAME,
                null,
                null,
                null,
                null,
                null,
                AlarmContract.AlarmEntry.COLUMN_TIMESTAMP + " DESC"
        );
    }

    private void TimePicker(){
        final Calendar date;
        final Calendar currentDate = Calendar.getInstance();
        date = Calendar.getInstance();
        new DatePickerDialog(AlarmActivity.this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                date.set(year, monthOfYear, dayOfMonth);
                new TimePickerDialog(AlarmActivity.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        date.set(Calendar.HOUR_OF_DAY, hourOfDay);
                        date.set(Calendar.MINUTE, minute);
                        Log.v(TAG, "The choosen one " + date.getTime());
                                startAlarm(date);
//                                DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
                        mTextView.setText((CharSequence) date.getTime());

                    }
                }, currentDate.get(Calendar.HOUR_OF_DAY), currentDate.get(Calendar.MINUTE), false).show();
            }
        }, currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE)).show();

    }

    private void startAlarm(Calendar c) {
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        //Passing data
        String message = mMessage.getText().toString();
        id = (int) System.currentTimeMillis();
        Intent intent = new Intent(this, AlertReceiver.class);
        intent.putExtra("Message", message);
        intent.putExtra("ID", id);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id, intent, 0);
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);

    }

    private void cancelAlarm() {
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, AlertReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id, intent, 0);
        alarmManager.cancel(pendingIntent);
        mTextView.setText("Alarm canceled");
        mMessage.setText("");
    }

}


public class AlertReceiver extends BroadcastReceiver {

    private static String message;
    private static int ID;

    @Override
    public void onReceive(Context context, Intent intent) {


        message = intent.getStringExtra("Message");
        ID = intent.getIntExtra("ID",0);

              NotificationHelper notificationHelper = new NotificationHelper(context);
              NotificationCompat.Builder nb = notificationHelper.getChannel1Notification(message);
              notificationHelper.getManager().notify(ID,nb.build());

    }

}

你为什么需要在这里进行单独的活动?完整的对话或片段在这里不是更方便吗?问题应该与您的
startAlarm
方法有关。当你删除这一行时,它是否仍然立即切换
活动
?@cewaphi Yeah bro我也认为这就是问题所在。我认为某种未决的意图错误。我关闭了启动警报,但错误仍然没有出现。