在android中最喜欢的recyclerview,使用sqlite收藏按钮

时间:2018-02-10 23:20:45

标签: java android sqlite

我有一个recylcerview,其中有一个收藏夹按钮,该按钮应该将该项目存储在另一个列表视图中,并将该项目的状态存储为"加星标或收藏"

当我点击按钮时,图像星会变成彩色但是当我离开片段并再次返回时它会变回灰色,好像我没有击中星星一样 这是sqlhelper类

 public class DBSQLiteHandler extends SQLiteOpenHelper {

public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "easyPronounce";
private static final String TABLE_WORD = "words";
private static final String KEY_ID = "id";
private static final String KEY_WORD = "word";
private static final String KEY_POS = "partofspeech";
Context context;

public DBSQLiteHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.context = context;
}

//create table
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_TABLE = "CREATE TABLE " + TABLE_WORD + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_WORD + " TEXT,"
            + KEY_POS + " TEXT" + ")";
    db.execSQL(CREATE_TABLE);
}

//update table
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_WORD);
    onCreate(db);
}

//add word
public void addWord(HotOffersData word){
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put(KEY_WORD, word.getName());
    contentValues.put(KEY_POS, word.getexpire());

    db.insert(TABLE_WORD,null,contentValues);
    db.close();     
}

//remove word
public void removeWord(HotOffersData word){
    SQLiteDatabase db = this.getWritableDatabase();

    db.delete(TABLE_WORD, KEY_WORD + " = ?", new String[]{String.valueOf(word.getName())});
    db.close();
}

//getWord
public HotOffersData getWord(HotOffersData word){
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_WORD, new String[]{KEY_ID,KEY_WORD,KEY_POS},KEY_ID + " = ?",
            new String[]{String.valueOf(word.getId())}, null,null,null,null);
    if(cursor!=null) 
        cursor.moveToFirst();

    HotOffersData wordFound = new HotOffersData(cursor.getString(1), cursor.getInt(2),cursor.getInt(3));

    return wordFound;
}

//getAllWords
public ArrayList<HotOffersData> getWords(){
    List<HotOffersData> wordsList = new ArrayList<HotOffersData>();
    String query = "SELECT * FROM " + TABLE_WORD;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(query, null);

    if(cursor.moveToFirst()){
        do{
            HotOffersData word = new HotOffersData(cursor.getString(0), cursor.getInt(1),cursor.getInt(2));
            wordsList.add(word);                
        }while(cursor.moveToNext());
    }

    return (ArrayList<HotOffersData>) wordsList;
}

}

这是适配器

   public class HotOffersAdapter extends 
 RecyclerView.Adapter<HotOffersAdapter.MyViewHolder> {
HotOffersAdapter adapter;
private ArrayList<StoresData> list;

static ClickListener clickListener;
DBSQLiteHandler dbHandler;
private Context mContext;
private List<HotOffersData> hotOffersDataList;
public ArrayList<HotOffersData> wordsListDB = new ArrayList<HotOffersData>();
public Object getItem(int location) {
    return list.get(location);
}




public HotOffersAdapter(Context mContext, List<HotOffersData> hotOffersDataList) {
    this.mContext = mContext;
    this.hotOffersDataList = hotOffersDataList;

    this.dbHandler = new DBSQLiteHandler(mContext);
    this.wordsListDB = (ArrayList<HotOffersData>)hotOffersDataList ;
}

@Override
public HotOffersAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.store_card, parent, false);


    return new HotOffersAdapter.MyViewHolder(itemView);
}

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onBindViewHolder(final HotOffersAdapter.MyViewHolder holder, final int position) {
    final HotOffersData hotOffersData = hotOffersDataList.get(position);
    holder.title.setText(hotOffersData.getName());
    holder.count.setText(" expires in  " + hotOffersData.getexpire());
    Glide.with(mContext).load(hotOffersData.getFlayerImage()).into(holder.thumbnail);

    // loading storesData cover using Glide library

    if(checkFavouriteItem(hotOffersData)){

        Drawable starFilled = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.coloredstar, null);
        starFilled.setBounds(0,0,24,24);
        holder.overflow.setBackground(starFilled);
        holder.overflow.setTag("filled");

    }else{

        Drawable starEmpty = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.favorite,null);
        starEmpty.setBounds(0,0,24,24);
        holder.overflow.setBackground(starEmpty);
        holder.overflow.setTag("empty");

    }


    holder.thumbnail.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            final Intent intent;
            if (position >= 0) {
                final HotOffersData storesData1 = hotOffersDataList.get(position);
                intent = new Intent(view.getContext(), FlyerDescription.class);
                intent.putExtra("store_name", storesData1.getName());
                intent.putExtra("store_image", storesData1.getFlayerImage());
                view.getContext().startActivity(intent);
            }
        }
    });
}





@Override
public int getItemCount() {
    return hotOffersDataList.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    public TextView title, count;
    public ImageView thumbnail, overflow;
    boolean starred = false;

    public MyViewHolder(View view) {
        super(view);
        title = (TextView) view.findViewById(R.id.title);
        count = (TextView) view.findViewById(R.id.count);
        thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
        overflow = (ImageView) view.findViewById(R.id.overflow);
        view.setOnClickListener(this);
        overflow.setOnClickListener(new View.OnClickListener() {

            @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
            @Override
            public void onClick(View view) {

                String tag = overflow.getTag().toString();
                if (tag.equalsIgnoreCase("empty") && !starred) {

                    //SharedPreference way
                    //mSharedPreference.addFavorite(mContext,   wordsList.get(getAdapterPosition()));

                    //SQLiteDB way
                    dbHandler.addWord(hotOffersDataList.get(getAdapterPosition()));

                    overflow.setTag("filled");
                    Drawable starFilled = ResourcesCompat.getDrawable(view.getResources(), R.drawable.coloredstar, null);
                    starFilled.setBounds(0, 0, 24, 24);
                    overflow.setBackground(starFilled);

                    Snackbar.make(view, "Added to Favorites", Snackbar.LENGTH_LONG).setAction("Remove",new View.OnClickListener() {

                        @Override
                        public void onClick(View view) {
                            //SharedPreference way
                            //mSharedPreference.removeFavorite(mContext, wordsList.get(getAdapterPosition()));

                            //SQLiteDB way
                            dbHandler.removeWord(hotOffersDataList.get(getAdapterPosition()));

                            Drawable star = ResourcesCompat.getDrawable(view.getResources(), R.drawable.favorite, null);
                            star.setBounds(0,0,24,24);
                            overflow.setBackground(star);
                        }
                    }).show();
                } else {

                    //SharedPreference way
                    //mSharedPreference.removeFavorite(mContext,    wordsList.get(getAdapterPosition()));

                    //SQLiteDB way
                    dbHandler.removeWord(hotOffersDataList.get(getAdapterPosition()));

                    //*****//
                    hotOffersDataList.remove(getAdapterPosition());
                    notifyItemRemoved(getAdapterPosition());
                    notifyItemRangeChanged(getAdapterPosition(), hotOffersDataList.size());
                    //*******//

                    overflow.setTag("empty");
                    Drawable starEmpty = ResourcesCompat.getDrawable(view.getResources(), R.drawable.favorite, null);
                    starEmpty.setBounds(0, 0, 24, 24);
                    overflow.setBackground(starEmpty);
                }
                starred =! starred;
            }
        });
    }

    @Override
    public void onClick(View view) {
        if(clickListener!=null){
            clickListener.itemClicked(view, getAdapterPosition());
        }
    }
}


public boolean checkFavouriteItem(HotOffersData checkStarredItem) {
    boolean check = false;
    //shared preference way
    /*List<Word> favouriteItemsInSharedPreference = mSharedPreference.getFavorites(mContext);

    if (favouriteItemsInSharedPreference != null) {
        for (Word word : favouriteItemsInSharedPreference) {
            if (word.equals(checkStarredItem)) {
                check = true;
                break;
            }
        }
    }*/


    //SQLiteDB way
    ArrayList<HotOffersData> itemsInDB = dbHandler.getWords();

    if (itemsInDB != null) {
        for (HotOffersData word : itemsInDB) {
            if((word.getName()).equals(checkStarredItem.getName())) {
                check = true;
                break;
            }
        }
    }
    return check;
}
public void setListener(ClickListener clicked){
    HotOffersAdapter.clickListener = clicked;
}
public interface ClickListener{
    public void itemClicked(View view, int position);
}

}

这是我的片段

     @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    activity = getActivity();
}



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View view = inflater.inflate(R.layout.fragment_hot_offers, container, false);

    storesDataList = new ArrayList<HotOffersData>();
    MyRecyclerView = (RecyclerView) view.findViewById(R.id.cardView);
    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getContext(), 2);
    MyRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    adapter = new HotOffersAdapter(getContext(), storesDataList);
    storesDataList.clear();

    for (int i = 0; i < offername.length; i++) {
        HotOffersData hotOffersData = new HotOffersData();
        hotOffersData.setName(offername[i]);
        hotOffersData.setExpire(expire[i]);
        hotOffersData.setFlayerImage(flayersimage[i]);
        //hotOffersData.isFavorite();


        storesDataList.add(hotOffersData);
    }

// getActivity()。setTitle(&#34; Flyers List&#34;);

    MyRecyclerView.setLayoutManager(mLayoutManager);
    MyRecyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
    MyRecyclerView.setItemAnimator(new DefaultItemAnimator());
    MyRecyclerView.setAdapter(adapter);



    MyRecyclerView.setLayoutManager(mLayoutManager);





    // prepareAlbums();




    return view;
}

我已经尝试了一个星期来实施它,正如我所提到的,每当我点击星星时它就变色了#34;黄色&#34;这是好的,但当我离开或关闭应用程序时,它变得灰色,好像我没有点击它 任何帮助将不胜感激

0 个答案:

没有答案