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我也认为这就是问题所在。我认为某种未决的意图错误。我关闭了启动警报,但错误仍然没有出现。