2016-01-03 115 views
1

我試圖在我的應用程序中創建類似喜歡的東西
我已經與可以設置爲收藏的餐廳進行了活動,我製作了用於製作餐廳最喜愛的圖像按鈕並且它正在工作,導致我有第二個活動,其中列表正在從數據庫獲取信息,一切正常。標題也匹配,所以也應該匹配城市,所以數據庫也應該匹配。
我在更改OnClickListener時遇到問題,我想使用數據庫中的信息來檢查名爲「database_name」的字符串是否與數據庫中的任何字符串匹配。
有代碼吧:設置OnClickListener不工作

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(); 
     } 
    }); 
} 

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(); 
     } 
    }); 
} 

問題在於它總是將ClickListener更改爲isntFavorite,並且它不會將圖像背景更改爲fille d心臟,即使數據庫中有匹配的數據。我試圖將匹配標題從數據庫更改爲活動標題,並且我確定它們匹配,因爲列表標題中包含與我試圖匹配它們的活動相同的字符串。

回答

0

你並不需要改變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); 

} 
+0

告訴我,如果它的作品給你。 –

+0

但是這個活動是從列表開始的,它從前面的活動中獲取關於餐館的數據,所以它不能使用保存的狀態,它沒有檢查從previous acitvity中取得的database_name是否與SQLite中的任何database_name匹配數據庫 – LisSkis

+0

正如我所見,例如,調用isFavorite(),直接將一個新的OnClickListener更改爲isntFavorite(),然後再讓isFavorite獲取第一個值,然後再發布它,還有另一種方法可以更改favoriteButton Listener? –