Android 设置OnClickListener不起作用

Android 设置OnClickListener不起作用,android,android-sqlite,Android,Android Sqlite,我正在尝试在我的应用程序中创建类似于最喜欢的东西的东西 我做了可以设置为收藏夹的餐厅活动,我做了使餐厅成为收藏夹的imagebutton,它正在工作,因为我有第二个活动,列表从数据库中获取信息,一切正常。标题匹配,地址匹配城市,所以数据库也应该匹配 我在更改OnClickListener时遇到问题,我想使用数据库中的信息检查名为“database\u name”的字符串是否与数据库中的任何字符串匹配 它有一个代码: mDbHelper = new FeedReaderDbHelper(getAp

我正在尝试在我的应用程序中创建类似于最喜欢的东西的东西
我做了可以设置为收藏夹的餐厅活动,我做了使餐厅成为收藏夹的imagebutton,它正在工作,因为我有第二个活动,列表从数据库中获取信息,一切正常。标题匹配,地址匹配城市,所以数据库也应该匹配
我在更改OnClickListener时遇到问题,我想使用数据库中的信息检查名为“database\u name”的字符串是否与数据库中的任何字符串匹配
它有一个代码:

mDbHelper = new FeedReaderDbHelper(getApplicationContext());
final SQLiteDatabase db = mDbHelper.getWritableDatabase();

String[] selection = {FeedReaderContract.FeedEntry.COLUMN_NAME_DATABASE};
favoriteButton = (ImageButton) findViewById(R.id.favoriteRestaurant);

Cursor cursor = db.query(FeedReaderContract.FeedEntry.TABLE_NAME, selection,
                null, null, null, null, null);

if(cursor.getCount() != 0) {
    cursor.moveToFirst();
        do {
            if(cursor.getString(0).toLowerCase() == database_name.toLowerCase()){
                favoriteButton.setBackground(getResources().getDrawable(R.drawable.favoritet));
                isFavorite = 1;
            }
        } while (cursor.moveToNext());
}
它正在改变这个最喜欢的按钮的背景,使之充满了内心,至少它应该这样做。默认情况下,它不会被填充

然后我将更改onClickListener,其代码如下所示:

if(isFavorite == 0) {
    favoriteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isntFavorite();
        }
    });
} else {
    favoriteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isFavorite();
        }
    });
}
private void isFavorite() {
        favoriteButton.setBackground(getResources().getDrawable(R.drawable.favoriteu));
    String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_DATABASE + " LIKE ?";
    mDbHelper = new FeedReaderDbHelper(getApplicationContext());
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    String[] selectionArgs = new String[] { database_name };

    db.delete(FeedReaderContract.FeedEntry.TABLE_NAME, selection, selectionArgs);
    favoriteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isntFavorite();
        }
    });
}
我的最爱是这样的:

if(isFavorite == 0) {
    favoriteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isntFavorite();
        }
    });
} else {
    favoriteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isFavorite();
        }
    });
}
private void isFavorite() {
        favoriteButton.setBackground(getResources().getDrawable(R.drawable.favoriteu));
    String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_DATABASE + " LIKE ?";
    mDbHelper = new FeedReaderDbHelper(getApplicationContext());
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    String[] selectionArgs = new String[] { database_name };

    db.delete(FeedReaderContract.FeedEntry.TABLE_NAME, selection, selectionArgs);
    favoriteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isntFavorite();
        }
    });
}
isntFavorite的代码如下所示:

private void isntFavorite() {
    favoriteButton.setBackground(getResources().getDrawable(R.drawable.favoritet));
    mDbHelper = new FeedReaderDbHelper(getApplicationContext());
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, restaurantName);
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_ADRESS, restaurantAdress);
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_CITY, restaurantCity);
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_DATABASE, database_name);
    long newRowId;
    newRowId = db.insert(FeedReaderContract.FeedEntry.TABLE_NAME,
                null, values);
    favoriteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isFavorite();
        }
    });
}

问题是,它总是将onClickListener更改为isntFavorite,而不会将图像背景更改为filled heart,即使数据库中有匹配的数据。我试图将数据库中的匹配标题更改为活动中的标题,我确信它们是匹配的,因为列表中的标题与我试图匹配它们的活动中的标题具有相同的字符串。

您不需要更改OnclickListener,只需创建一个布尔值即可保存状态:

final boolean state = isFavorite == 0;
    favoriteButton.setOnClickListener(new View.OnClickListener() {
     boolean mState = state;  
      @Override
        public void onClick(View v) {
           if(mState)isntFavorite();
           else isFavorite();
           mState=!mState;
        }
    });

private void isFavorite() {
    favoriteButton.setBackground(getResources().getDrawable(R.drawable.favoriteu));
    String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_DATABASE + " LIKE ?";
    mDbHelper = new FeedReaderDbHelper(getApplicationContext());
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    String[] selectionArgs = new String[] { database_name };
    db.delete(FeedReaderContract.FeedEntry.TABLE_NAME, selection, selectionArgs);

}

private void isntFavorite() {
    favoriteButton.setBackground(getResources().getDrawable(R.drawable.favoritet));
    mDbHelper = new FeedReaderDbHelper(getApplicationContext());
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, restaurantName);
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_ADRESS, restaurantAdress);
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_CITY, restaurantCity);
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_DATABASE, database_name);
    long newRowId;
    newRowId = db.insert(FeedReaderContract.FeedEntry.TABLE_NAME,
                null, values);

}

无需更改OnclickListener,只需创建一个布尔值即可保存状态:

final boolean state = isFavorite == 0;
    favoriteButton.setOnClickListener(new View.OnClickListener() {
     boolean mState = state;  
      @Override
        public void onClick(View v) {
           if(mState)isntFavorite();
           else isFavorite();
           mState=!mState;
        }
    });

private void isFavorite() {
    favoriteButton.setBackground(getResources().getDrawable(R.drawable.favoriteu));
    String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_DATABASE + " LIKE ?";
    mDbHelper = new FeedReaderDbHelper(getApplicationContext());
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    String[] selectionArgs = new String[] { database_name };
    db.delete(FeedReaderContract.FeedEntry.TABLE_NAME, selection, selectionArgs);

}

private void isntFavorite() {
    favoriteButton.setBackground(getResources().getDrawable(R.drawable.favoritet));
    mDbHelper = new FeedReaderDbHelper(getApplicationContext());
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, restaurantName);
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_ADRESS, restaurantAdress);
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_CITY, restaurantCity);
    values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_DATABASE, database_name);
    long newRowId;
    newRowId = db.insert(FeedReaderContract.FeedEntry.TABLE_NAME,
                null, values);

}

但是这个活动是从列表开始的,它从以前的活动中获取关于餐馆的数据,所以它不能使用保存状态,它没有检查从以前的活动中获取的数据库名称是否与SQLite数据库中的任何数据库名称相匹配,正如我所看到的,例如,当您调用isFavorite()时,在isFavorite获取第一个值之前,您直接将一个新的OnClickListener更改为isntFavorite(),正如我发布的,更改favoriteButton侦听器时还有另一种方法?我认为第一个值处于:最终布尔状态isFavorite==0;不带()的isFavorite为int,默认值为0,因为在默认情况下,餐厅不是收藏夹,然后应用程序正在检查数据库中是否有与上一个城市的数据库名称匹配的数据库名称,如果有匹配的内容,则将isFavorite值更改为1,检查后,应用程序更改onClickListener,这取决于isFavorite变量,如果它是1,它就必须运行IsAppItIe(),如果它是0,它应该运行ISNTopIdIt()是的,因为我已经考虑了:最后的布尔状态IsAppList==0;但是这个活动是从列表开始的,它从以前的活动中获取关于餐馆的数据,所以它不能使用保存状态,它没有检查从以前的活动中获取的数据库名称是否与SQLite数据库中的任何数据库名称相匹配,正如我所看到的,例如,当您调用isFavorite()时,在isFavorite获取第一个值之前,您直接将一个新的OnClickListener更改为isntFavorite(),正如我发布的,更改favoriteButton侦听器时还有另一种方法?我认为第一个值处于:最终布尔状态isFavorite==0;不带()的isFavorite为int,默认值为0,因为在默认情况下,餐厅不是收藏夹,然后应用程序正在检查数据库中是否有与上一个城市的数据库名称匹配的数据库名称,如果有匹配的内容,则将isFavorite值更改为1,检查后,应用程序更改onClickListener,这取决于isFavorite变量,如果它是1,它就必须运行IsAppItIe(),如果它是0,它应该运行ISNTopIdIt()是的,因为我已经考虑了:最后的布尔状态IsAppList==0;