【问题标题】:Where to call finish()?在哪里调用finish()?
【发布时间】:2016-02-22 13:49:50
【问题描述】:

我正在保存一个活动。当我点击保存时,我想检查标题是否不为空并且开始时间等于结束时间并且剂量事件重叠,然后保存事件。

我有一个布尔变量来检查编辑模式是否为真。如果是真的,我想更新现有的事件。

现在我尝试这样做,但是当我保存活动时,我想检查所有这些场景并显示小吃栏,然后完成活动。

1) 但是现在只要我点击保存,活动就会完成。

2) 当我想更新它时,它显示事件存在。

这里有什么问题?

  save.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            eventTitle = title.getText().toString();
            location = mAutocompleteView.getText().toString();


            if (eventTitle.length() == 0) {

                showAlert("Title can not be empty.");

            }
            else if (startTime.equals(endTime)) {
                showAlert("End Time can not be same as Start Time.");
            }

            else if (db.doesEventOverlap(startTime,endTime,dayOfWeek)) {

               showAlert("Event Exists");

            }

            else {

                if (editMode) {

                eventData.setTitle(title.getText().toString());
                eventData.setFromDate(fromDate);
                eventData.setToDate(toDate);
                eventData.setDayOfWeek(selectDay.getText().toString());
                eventData.setLocation(mAutocompleteView.getText().toString());
                eventData.setNotificationTime(notificationTime);

                    db.updateEvent(eventData);

                    Toast.makeText(getApplicationContext(),"Event Updated",Toast.LENGTH_SHORT).show();
                }

               else {
                        db.addEvent(new EventData(eventTitle, startTime, endTime, dayOfWeek, location, notificationTime, mColor));
                        showAlert("Event Added.");
                }

                setResult(RESULT_OK, i);
                finish();
            }
        }
    });

剂量事件重叠函数:

     boolean doesEventOverlap(String startTime, String endTime, String day) {
    String selectQuery = "SELECT COUNT(*) FROM " + TABLE + " WHERE " + KEY_DAY_OF_WEEK + " = '" + day + "'" + " AND "

            + "(" + KEY_FROM_DATE + " < '" + startTime
            + "' AND '" + startTime + "' < " + KEY_TO_DATE + ") OR "

            + " (" + KEY_FROM_DATE + " < '" + endTime
            + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

            + " (" + KEY_FROM_DATE + " < '" + startTime
            + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

            + " ('" + startTime + "' < " + KEY_FROM_DATE
            + " AND " + KEY_TO_DATE + " < '" + endTime + "')";


    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            EventData event = new EventData();
            return cursor.getInt(0) > 0;
        } while (cursor.moveToNext());
    }
    return false;
}

创建表

  public void createTable(SQLiteDatabase db){
    String CREATE_EVENTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + KEY_TITLE + " TEXT,"
            + KEY_FROM_DATE + " DATE,"
            + KEY_TO_DATE + " DATE,"
            + KEY_DAY_OF_WEEK + " TEXT,"
            + KEY_LOCATION + " TEXT,"
            + KEY_NOTIFICATION_TIME + " DATE,"
            + KEY_COLOR + " TEXT" + ")";

    db.execSQL(CREATE_EVENTS_TABLE);
}

谢谢你..

编辑:

显示小吃店的警报方法。

 public void showAlert(String alert){

    Snackbar.make(parentLayout, alert, Snackbar.LENGTH_LONG).show(); // Don’t forget to show!

    Snackbar.setCallback(new Snackbar.Callback() {
        @Override
        public void onDismissed(Snackbar snackbar, int event) {
            super.onDismissed(snackbar, event);
            finish();
        }

        @Override
        public void onShown(Snackbar snackbar) {
            super.onShown(snackbar);
        }
    }
}

【问题讨论】:

  • 请提供您的堆栈跟踪.....

标签: android sqlite sql-update activity-finish


【解决方案1】:

如果你正在使用Snackbar,你可以使用Snackbar.Callback接口在snackbar被关闭时监听,然后完成活动。

例子:

Snackbar snackbar = Snackbar.make(save, "Message", Snackbar.LENGTH_SHORT);
        snackbar.setCallback(new Snackbar.Callback() {
            @Override
            public void onDismissed(Snackbar snackbar, int event) {
                super.onDismissed(snackbar, event);
                finish();
            }

            @Override
            public void onShown(Snackbar snackbar) {
                super.onShown(snackbar);
            }
        });

已编辑:

Snackbar snackbar = Snackbar.make(parentLayout, alert, Snackbar.LENGTH_LONG);

        snackbar.setCallback(new Snackbar.Callback() {
            @Override
            public void onDismissed(Snackbar snackbar, int event) {
                super.onDismissed(snackbar, event);
                finish();
            }

            @Override
            public void onShown(Snackbar snackbar) {
                super.onShown(snackbar);
            }
        });

        snackbar.show(); // Don’t forget to show!

【讨论】:

  • 其显示错误非静态方法无法从静态上下文中引用。@Octaviano Putra
  • 你在哪里写这个声明?
  • 我已经为snackbar创建了方法。请检查已编辑的问题。
  • setCallback 是非静态方法。所以你必须先将你创建的snackbar分配给一个变量,然后调用setCallback方法
  • 谢谢你..这行得通..但是你能检查我的剂量事件重叠功能吗?我想更新事件,但它显示事件存在,我想检查事件是否存在以保存事件。 if else 逻辑有什么问题?@Octaviano Putra
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 2015-08-11
  • 2019-11-06
  • 2012-03-13
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多